Sortierung in Excel
gant
- vb-script
0 Siechfred0 Jörg Lorenz
Hallo
Ich erhalte von einem Liefersystem ein Textfile, welches ich in Excel importieren muss. Das klappt auch. Das Textfile enthält dummerweise Leerzeilen. Die weitere Verarbeitung des Excel-Sheets erträgt dies aber nicht. D.h. Das Sheet wird Zeilenweise abgearbeitet, sobald eine Leerzeile folgt, bricht die Verarbeitung ab, was so gewollt ist.
Um sicherzustellen, dass auf eine Leerzeile nix mehr folgt, will ich nun das Excelsheet sortieren, und zwar absteigend, nach der ersten Spalte. Irgendwie funktioniert das aber nicht, Ich erhalte immer die Meldung, dass 'Range' nicht definiert ist...
Hätte mir wohl jemand einen Tip?
Hier noch der betroffene Code:
oExcel.Workbooks.OpenText cIMPORTFILE, 2, 1, 1, 1, False, False, False, False, True, False
Dim myWorksheet
'Dim iColumn
'Dim iRow
Set myWorksheet = oExcel.Workbooks.Item(1).Sheets.Item(1)
myWorksheet.Range("A1").Sort Range("A1"),xlDescending
ActiveWorkbook.SaveAs("temp.xls")
Danke und Gruss
Tag gant.
Um sicherzustellen, dass auf eine Leerzeile nix mehr folgt, will ich nun das Excelsheet sortieren, und zwar absteigend, nach der ersten Spalte. Irgendwie funktioniert das aber nicht, Ich erhalte immer die Meldung, dass 'Range' nicht definiert ist...
Das Range-Objekt ist ein eigenes Objekt, von dem du erst eine Instanz erzeugen musst, bevor du es benutzen kannst. Schau dir mal dieses HowTo aus dem MSDN an.
Siechfred
Hi Gant,
Set myWorksheet = oExcel.Workbooks.Item(1).Sheets.Item(1)
myWorksheet.Range("A1").Sort Range("A1"),xlDescending
ActiveWorkbook.SaveAs("temp.xls")
ungetestet, weil es schnell gehen muß: Probiere mal
Set myWorksheet = oExcel.Workbooks.Item(1).Sheets.Item(1)
myWorksheet.Range("A1").Sort myWorksheet.Range("A1"),xlDescending
oExcel.ActiveWorkbook.SaveAs("temp.xls")
Eine Gefahr sehe ich aber noch, nämlich daß Excel den ausgefüllten Bereich nicht erkennt, wenn da Leerzeilen enthalten sind. Hier bestände die Möglichkeit, mit cells(rows.count,1).end(xlup).row die letzte ausgefüllte Zelle in Spalte A abzufragen und dann genau den Bereich bis zu dieser Zeile sortieren zu lassen.
Viele Grüße
Jörg
Jörg
Besten Dank, das funktioniert bestens.
Gruss
gant
Nochmal ich...
So gut funktionierts doch noch nicht. Folgendes Problem: Bei jeder Verwendung von xlUp (und allen anderen xl... Konstanten) meckert er mir zur Laufzeit, dass diese nicht existieren würden...
Weisst Du auch da Rat?
Danke, Gruss
gant
Tag gant.
So gut funktionierts doch noch nicht. Folgendes Problem: Bei jeder Verwendung von xlUp (und allen anderen xl... Konstanten) meckert er mir zur Laufzeit, dass diese nicht existieren würden...
M.E. müsste es so aussehen:
Dim rng as Excel.Range = ThisApplication.Range("A1")
rng.Sort( _
key1:=Range.columns(1), _
order1:=xlDescending)
Siechfred
Hallo Siechfred
Es funktioniert sowohl Deine Version, als auch diejenige von Jörg. Fehler entstehen soblad ich diese Excel-Konstanten einsetze. Suche gerade auf msdn, ob diese Konstanten auch durch Integerwerte ausgedrückt werden könnten...
Gruss
gant
Tag gant.
Es funktioniert sowohl Deine Version, als auch diejenige von Jörg. Fehler entstehen soblad ich diese Excel-Konstanten einsetze. Suche gerade auf msdn, ob diese Konstanten auch durch Integerwerte ausgedrückt werden könnten...
Hm, ich hatte den Fehler eher in der Wertzuweisung vermutet (also key1:=Wert und order1:=xl...). Seltsam.
Siechfred
Hi gant,
So gut funktionierts doch noch nicht. Folgendes Problem: Bei jeder Verwendung von xlUp (und allen anderen xl... Konstanten) meckert er mir zur Laufzeit, dass diese nicht existieren würden...
Weisst Du auch da Rat?
Nee, nicht wirklich. Da ich in dieser Richtung auch ab und zu mal Probleme hatte, habe ich mir angewöhnt, den meisten Code (was Excel betrifft) in Excel-VBA zu schreiben. Das heißt, ich rufe z. B. von VB Excel auf, übergebe an den VBA-Code das, was gebraucht wird, verarbeite mit VBA die Daten und übergebe sie wieder dahin, wo sie gebraucht werden. Das geht wesentlich zuverlässiger und ich spare mir die ganze Referenzierung auf Excel. Vielleicht wäre das für Dich ja auch eine Möglichkeit.
Viele Grüße
Jörg