Daten Sortieren in Excel

16. Mai 2008 11:13

Hallo,

IN excel gibt es ja dei Funktion Daten zu sorteiren.

Makro das ich aufgezeichnet habe:


Code:
   Range("A1:J124").Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal


Diese Funktion muss ich doch irgendwie für ein Excel File das ich exportiere aus Navision Aufrufen können oder ?

Mein ansatz zur lösung :

Code:

xlRange:=xlWorksheet[1].Range('A1:'+FORMAT(Linint3));

xlRange.Sort('A3',1);


Hat jemand deise funktion schon einmal benutzt und kann mri sagen welche Parameter ich brauche und was dor stehen muss ?

16. Mai 2008 11:31

Ach und die Variablen:

Code:
   Name              DataType                            Subtype   
xlWorksheet   Automation    Unknown Automation Server.Worksheet   
xlRange             Automation   Unknown Automation Server.Range

16. Mai 2008 12:19

Versuch es mal mit folgender Funktion

Code:
// fnDatenSortieren(StartSpalte : Code[10];StartZeile : Integer;EndSpalte : Code[10];EndZeile : Integer;SortierSpalte : Code[10])

XlWrkSht.Range(StartSpalte+FORMAT(StartZeile-1)).Select;
XlApp.ActiveWindow.FreezePanes := TRUE;
XlWrkSht.Range(StartSpalte+FORMAT(StartZeile) + ':'+
  EndSpalte+FORMAT(EndZeile-1)).Sort(XlWrkSht.Range( SortierSpalte+FORMAT(StartZeile)));


Gruß
Ralf

16. Mai 2008 12:34

Noch ein kleiner Nachtrag zu deinem Lösungsansatz:

Wenn du Excel-Funktionen von Navision aus aufrufen möchtest, musst du immer alle Parameter-Werte übergeben (auch optionale) - sonst läuft das nicht.

Gruß
Ralf

16. Mai 2008 13:31

Danke Das gnaze Funktioniert schon ganz gut. jetzt habe ich nru noch das Problem das ich 4 Worksheets habe und der Select nicht funktioniert. Die Workscheets sind bei Mir als Array. Heist xlWorkscheet[1] usw. Die frage sit noch wie Führe ich es aus das ein bestimmtes Worksheet auf Dem bildschirm ausgewählt wird.

16. Mai 2008 14:04

Ok das mit dem Selektieren habe ich hin bekommen. Nur jetzt sorteirt er die Überschriften mit woran kann das leigen ? Die Fenster Fixierung macht er an der richtigen stelle.

Code:
xlWorksheet[1].Activate;
xlWorksheet[1].Range('A3').Select;
xlAppl.ActiveWindow.FreezePanes := TRUE;
xlWorksheet[1].Range('a4'+ ':'+'J'+FORMAT(LinInt2-1)).Sort(xlWorksheet[1].Range('a4'));

17. Mai 2008 03:40

Dein Code muß wie folgt aussehen:

Code:
xlWorksheet[1].Range('a4'+ ':'+'J'+FORMAT(LinInt2-1)).Sort(xlWorksheet[1].Range('a4'),Orientierung,'','',1,'',1,1);


Beachte dabei die hinten angestellten Parameter.
Den Parameter "Orientierung" musst Du noch durch 1 = aufsteigend oder durch 2 = absteigend ersetzen.
Der entscheidende Parameter, damit die Überschriftszeile als solches erkannt und nicht mit einsortiert wird, ist der letzte Parameter.

Ich hoffe ich konnte Dir damit helfen.

Falls allgemeines Interesse besteht, kann ich die Tage mal meine Standard-Codeunit für Excel-Verarbeitungen einstellen, die noch einige andere Funktionaliäten - wie ich meine - sehr leicht nutzbar macht.

Gruß
Ralf

17. Mai 2008 03:48

Noch ein Nachtrag!

Das vorangestellte Select und FreezPanes kannst Du dir für Deine Zwecke sparen. Bei mir hatte dieser Code andere Hintergründe.

Gruß
Ralf

30. Mai 2008 11:25

Also habe mich nun wieder mit beschäftigen können aber hat leider immer noch nicht den Gewünschten Efekt gebracht. Er macht imemr noch das selbe.

Code:

xlWorksheet[1].Activate;
xlWorksheet[1].Range('a4'+ ':'+'J'+FORMAT(LinInt2-1)).Sort(xlWorksheet[1].Range('a4'),1,'','',1,'',1,1);



Keine ahnung woran es liegt.

Was die Codeunit angeht ich habe auf jeden Fall interesse daran. Bin dabei nach und nach fast alles Reports in Excel zu übertragen.

30. Mai 2008 11:43

das Komische ist das er einen Select Befehl über den Range Bereich richtig ausführt und auch nur die richtigen Zeilen auswählt aber beim Sortieren zeiht er aufeinmal die Überschriten mit an und setzt sie nach ganz unten.

31. Mai 2008 11:05

komisch - bei mir klappt alles einwandfrei !?

Vielleicht kommst Du ja mit meiner CU weiter.
Hier erstmal ein paar Infos dazu:

Für jeden neu zu erstellenden Excel-Bericht verwende ich eine einzelne, zentrale Funktion, die alle Aufgaben übernimmt und für jeden einzelnen Bericht einfach kopiert und angepasst wird (siehe hierzu anliegende CU). Die Verwendung eines Reports ist mir zu umständlich (Nachteil ist lediglich, dass ich ggf. dadurch eine flexible Filterung - wie sie im Report standard ist - selbst einbinden muss);

Weiterhin verwende ich zwar einige Funktionen und die Objektvariablen der Tabelle 370 (Excel Buffer) um den Standard weitestgehend auszunutzen - nehme die eigentliche Verarbeitung aber teilweise direkt über Automation-Befehle vor. Eine Verarbeitung von 10.000 Datensätzen benötigt dadurch nur Minuten statt "Tagen" (Die Performance ist dadurch - gegenüber früher - einfach traumhaft). Dies habe ich dadurch realisiert, das ich die Formatierungen direkt steuere und nicht über die Feld-Parameter der Excel Buffer-Tabelle.

Hierzu habe ich die Excel Buffer-Tabelle um einige Funktionen erweitert.
Dabei habe ich bewusst darauf verzichtet, den Standard-Code zu ändern.
Bis auf eine kleine Ausnahme sind einfach nur die zusätzlichen Funktionen hinzuzufügen.
WICHTIG: Die Ausnahme ist eine Kopie der globalen Variablen XlWrkSht als XlWrkShtTmp - dies musst Du als erstes machen.

Danach sind die Funktionen in der anliegenden Txt-Datei (ExcelBufferFunktionen.txt) einzufügen.
Ich würde dir ja gerne die komplette Tabelle 370 zur Verügung stellen - aber dies könnte evtl. lizenzrechtlich nicht erlaubt sein. Daher musst Du die Funktionen wohl manuell einpflegen.

Dann kannst Du die CU50091 importieren. Falls der Index bei Dir schon belegt ist - dann einfach in der Txt-Datei ändern.

U.a. sind folgende Funktionalitäten eingebaut:
- einheitliches Seitenlayout (Funktion fnSeiteEinrichten)
mit Firmen-Logo (oder falls Datei nicht auffindbar - Firmenname)
mit Seite x von x, etc.
- flexible Nutzung von Seitengröße und Seitenausrichtung
- vorangestellte und angehängte Tabellen (Sheets) korrekt einsortiert
(Infoblatt für "nachfolgend zusammengestellte" aber in Excel-Datei vorangestellte Infos)
- Spaltenangabe durchgängig als numerischer Spaltenindex statt als Spaltenname (z.B. 'D3')
- vielfältige, variable einsetzbare Formatierungen (z.B. jede zweite Zeile mit anderem Hintergrund)
- Sortierung der Zeilen nach einem oder mehreren Feldern
etc.

Die Verwendung der Funktionen und deren Parameter sind ausführlich in der CU50091 hinterlegt. Also keine Angst vor der Menge an Codezeilen (wenn die Beschreibungen rausgelöscht werden, bleibt kaum noch was übrig :-))

Noch ein Hinweis:
Als erstes solltest Du die Excel-Buffer-Funktion fnSeiteEinrichten auf Eure Bedürfnisse anpassen. Hierüber wird dann sichergestellt, das jeder Bericht optimal formatiert ist und immer gleich aussieht.

Ob das ganze was für den Bereich "Tipps und Tricks" ist können Timo, Nadine und Co. entscheiden.
Auf jeden Fall würde ich mich über Feedback und zusätzliche Funktionserweiterungen eurerseits freuen.
Ich selbst versuche mich gerade an Erweiterungen für Diagramme und Pivot-Tabellen.
Falls dazu schon jemand was verwertbares hat, würde ich das gerne einbinden.

Gruß
Ralf

PS: Ich nutze Excel 2007. Ob auch alles unter anderen Excel-Versionen läuft weis ich nicht, obwohl ich schon darauf geachtet habe, nur "alte" Automation-Funktionen zu verwenden.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

31. Mai 2008 11:41

Noch ein Tip für BT_Mark:

Falls das Problem mit der Sortierung evtl. doch an der Excel-Version liegt, gehe wie folgt vor:

Fülle in Excel erstmal nur die Datenzeilen (keine Überschrift); danach die Daten sortieren; und erst als letztes die Überschriften in die Zeile 1 übertragen.
So müsstest Du dein Problem auf jeden Fall in den Griff bekommen.

Gruß
Ralf