gant: Sortierung in Excel

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

  1. 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

  2. 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

    1. Jörg

      Besten Dank, das funktioniert bestens.

      Gruss
      gant

    2. 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

      1. 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

        1. 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

          1. 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

      2. 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