Excel letzte Zeile mit Inhalt finden - Benötige Hilfe bei COMException

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von ray.

    Excel letzte Zeile mit Inhalt finden - Benötige Hilfe bei COMException

    Erstmal ein herzliches Hallo, habe mich eben im Forum angemeldet.

    Leider finde ich zu dem Thema nur VBA Lösungen, irgendwas an meinem Code um die letzte Zeile mit Inhalt (bspw. in Spalte A) in einer Excel Tabelle zu finden klappt nicht.

    Ich habe folgende Varianten ausprobiert:

    Quellcode

    1. xlsWSheetExtract.Cells(1, 1).SpecialCells(Excel.XlCellType.xlCellTypeLastCell, vbEmpty)
    2. xlsWSheetExtract.Range("A1:A9999").SpecialCells(Excel.XlCellType.xlCellTypeLastCell, vbEmpty)

    Beide mit dem Ergebnis:

    COMException nicht behandelt:
    Die SpecialCells-Eigenschaft des Range-Objektes kann nicht zugeordnet werden.

    Hat jmd ne Idee was an dem Code falsch ist?

    Vielen Dank im Voraus!

    Grüße
    Mach doch aus der unbehandelten Exception eine behandelte:

    VB.NET-Quellcode

    1. Try
    2. xlsWSheetExtract.Cells(1, 1).SpecialCells(Excel.XlCellType.xlCellTypeLastCell, vbEmpty)
    3. xlsWSheetExtract.Range("A1:A9999").SpecialCells(Excel.XlCellType.xlCellTypeLastCell, vbEmpty)
    4. Catch ex As COMException
    5. ' hier kommt er dann an
    6. Catch ex As Exception
    7. ' falls sonst noch was ist
    8. End Try
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ist klar :D Dann fang doch mal an, kleine Brötchen zu backen.
    Lass alles, was mit Excel zu tun hat, zunächst weg uind bring den Rest zum Laufen.
    Dann sehen wir weiter.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Genau da bin ich.

    Momentan hol ich mir die letzte Zeile via while, d.h.:

    Quellcode

    1. While (Not xlsWbookExtract.Worksheets(1).Cells(intTotalRowsExtract, 5).Value Is Nothing)
    2. intTotalRowsExtract += 1
    3. End While


    Das dauert dann schonmal 15-20 Sekunden.

    Der Rest meines Programms (Daten in einer Excel Datei finden und in andere kopieren) funktioniert dann dementsprechend gut, hab zwar noch ne zweite Frage, aber erstmal muss das geklärt werden.
    Verwende bitte die Standardeinstellungen.
    Und nicht "Code", sondern "VB".
    Und was geht nun nicht?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Verwende bitte die Standardeinstellungen.
    Und nicht "Code", sondern "VB".

    Sorry, mach ich.
    Und was geht nun nicht?

    ray schrieb:

    [...] irgendwas an meinem Code um die letzte Zeile mit Inhalt (bspw. in Spalte A) in einer Excel Tabelle zu finden klappt nicht.

    Ich habe folgende Varianten ausprobiert:

    VB.NET-Quellcode

    1. xlsWSheetExtract.Cells(1, 1).SpecialCells(Excel.XlCellType.xlCellTypeLastCell, vbEmpty)
    2. xlsWSheetExtract.Range("A1:A9999").SpecialCells(Excel.XlCellType.xlCellTypeLastCell, vbEmpty)


    Beide mit dem Ergebnis:

    COMException nicht behandelt:
    Die SpecialCells-Eigenschaft des Range-Objektes kann nicht zugeordnet werden.

    Hat jmd ne Idee was an dem Code falsch ist?

    Vielen Dank im Voraus!
    Pflücke die Zeile auseinander.
    Erzeuge Dir eine richtig deklarierte Variable

    VB.NET-Quellcode

    1. Dim xxx As RICHTIGE_DEKLARATION = xlsWSheetExtract.Range("A1:A9999")

    und sieh sie Dir an.
    Dann greif so zu:

    VB.NET-Quellcode

    1. xxx.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, vbEmpty)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für den Tipp, das hatte ich vorher leider auch kurz probiert, jetzt gerade nochmal:

    VB.NET-Quellcode

    1. Dim findRange As Excel.Range = xlsWSheetExtract.Range("A1:A9999")
    2. findRange.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, vbEmpty)


    Compiler: COMException wurde nicht behandelt. Die SpecialCells-Methode des Range-Objektes konnte nicht ausgeführt werden.

    Irgendwas muss entweder an den Parametern für SpecialCells falsch sein oder darf man die Funktion generell nicht für Excel.Range aufrufen? Da stimmt doch was nicht
    Setze auf die Zeile

    VB.NET-Quellcode

    1. findRange.SpecialCells(...)

    einen Haltepunkt und sieh Dir den Inhalt der Variable an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Genau das Problem, das der Compiler rausgibt:

    VB.NET-Quellcode

    1. findRange.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, vbEmpty) {"Die SpecialCells-Methode des Range-Objektes konnte nicht ausgeführt werden."} System.Runtime.InteropServices.COMException
    Dann frag doch mal Herrn Google zu diesem Thema.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok Kollege, die Hilfe in aller Ehren, aber wenn ich das nicht schon gemacht hätte und nicht nur Lösungen zu VBA, die ich aber leider nicht auf vb.net transferieren konnte, gefunden hätte, hätte ich mich hier nicht angemeldet um direkt eine Person fragen zu können, die das Problem u.U. schonmal hatte und mir helfen kann. Also bitte, solche Hinweise bringen bei dem Problem nichts.
    Hat noch irgendjemand ne Idee? Mir wäre auch eine andere (schnelle) Möglichkeit Recht um die letzte Zelle herauszufinden, anstelle von SpecialCells - nur die selbstgeschriebene While Schleife dauert zu lange um den Anforderungen des Programms gerecht zu werden.
    Und wenn Du die erste Zeile suchst, die vollständig oder in der aktuellen Spalte leer ist?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das wäre warscheinlich auch ne Möglichkeit gewesen, habs aber grad endlich doch noch rausgefunden:

    Über "xlsApp.ActiveCell.SpecialCells(Excel.XlCellType.xlCellTypeLastCell)" kommt man an die letzte Zeile via .Row ran. Auf ActiveCell wäre ich jetzt auch nicht ohne weiteres gekommen - die Dokumentation seitens Microsoft ist da mMn etw. verbesserungswürdig ;).