Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Letzte Zeile aus geschlossene Excel Datei

Forumthread: Letzte Zeile aus geschlossene Excel Datei

Letzte Zeile aus geschlossene Excel Datei
Nchne2909
Hallo,
kann man aus einer geschlossenen Excel Datei von einen bestimmten Arbeitsblatt und Spalte die letzte benutzte Zeile ermitteln. Also wie der Code unten nur mit Angabe einer Exceldatei z.B. c:\temp\test.xls
Zlast = Cells(Rows.Count, 1).End(xlUp).Row
Danke, chn
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Letzte Zeile aus geschlossene Excel Datei
24.04.2012 14:27:13
Frank
Hallo chn,
du musst die Datei erst mit
Workbooks.Open Filename:="C:\temp\test.xls"
öffnen. Falls Du nicht willst, dass man das sieht, kannst Du mit
Application.ScreenUpdating = False
Die Anzeige deaktivieren und sie nach dem schließen der Datei mit = True wieder aktivieren.
Gruß
Frank
Anzeige
AW: Letzte Zeile aus geschlossene Excel Datei
24.04.2012 15:36:27
Nchne2909
Ohne die Datei zu öffnen geht wohl nicht? Vielleicht meldet sich noch jemand mit einer anderen Idee.
Danke
nein, ohne Öffnen geht es nicht! owT
24.04.2012 16:10:45
Sheldon
Gruß
Sheldon
AW: Letzte Zeile aus geschlossene Excel Datei
24.04.2012 22:35:13
Josef

Hallo ?,
geht schon.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub test()
  Dim strFile As String, strTab As String, strRef As String
  
  strFile = "E:\Forum\letzteZeile.xlsx" 'Datei
  strTab = "Tabelle1" 'Tabelle
  strRef = "A:A" 'Bereich
  
  MsgBox lastRowClosedFile(strFile, strTab, strRef)
End Sub


Private Function lastRowClosedFile(FileName As String, SheetName As String, TargetRange As String) As Long
  Dim objADO As Object
  
  On Error Resume Next
  
  Set objADO = ExcelTable(FileName, SheetName, TargetRange)
  lastRowClosedFile = objADO.RecordCount + 1
  objADO.Close
  
End Function


Private Function ExcelTable(ByRef Path As String, ByRef Table As String, ByRef SourceRange As String) As Object
  Dim SQL As String
  Dim Con As String
  
  SQL = "select * from [" & Table & "$" & SourceRange & "]"
  
  If Mid(Path, InStrRev(Path, ".") + 1) = "xls" Then
    Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Extended Properties=Excel 8.0;" _
      & "Data Source=" & Path & ";"
  ElseIf Mid(Path, InStrRev(Path, ".") + 1) Like "xls?" Then
    Con = "Provider=Microsoft.ACE.OLEDB.12.0;" _
      & "Extended Properties=""Excel 12.0;HDR=YES"";" _
      & "Data Source=" & Path & ";"
  Else
    Exit Function
  End If
  Set ExcelTable = CreateObject("ADODB.Recordset")
  ExcelTable.Open SQL, Con, 3, 1
End Function



« Gruß Sepp »

Anzeige
AW: Frage an Josef
25.04.2012 18:41:19
HermannZ
Hallo Josef;
Deine Makros haben ein Problem, das ich seit längerem vor mich hin schiebe, gelöst. Danke.
Da ich in VBA eine Null bin, möchte ich dich hiermit bitten mir kurz die VBA sequenz aufzuzeigen
die ich brauche um aus dieser ermittelten Zeilenzahl zusätzlich den Wert dieser Zelle zu erhalten.
Danke.
Anzeige
AW: Frage an Josef
25.04.2012 19:43:17
Josef

Hallo Hermann,
beachte aber, dass der Zugriff auf Exceltabellen per ADO nur funktioniert, wenn die Daten auch entsprechend angeordnet sind.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub test()
  Dim strFile As String, strTab As String, strRef As String
  
  strFile = "E:\Forum\letzteZeile.xlsx" 'Datei
  strTab = "Tabelle1" 'Tabelle
  strRef = "A:A" 'Bereich
  
  MsgBox lastCellClosedFileValue(strFile, strTab, strRef)
End Sub



Private Function lastCellClosedFileValue(FileName As String, SheetName As String, TargetRange As String) As Variant
  Dim objADO As Object
  Dim lngCount As Long
  
  On Error Resume Next
  
  Set objADO = ExcelTable(FileName, SheetName, TargetRange)
  With objADO
    lngCount = .RecordCount
    .Move lngCount - 1
    lastCellClosedFileValue = .Fields(0)
    .Close
  End With
  Set objADO = Nothing
End Function



Private Function ExcelTable(ByRef Path As String, ByRef Table As String, ByRef SourceRange As String) As Object
  Dim SQL As String
  Dim Con As String
  
  SQL = "select * from [" & Table & "$" & SourceRange & "]"
  
  If Mid(Path, InStrRev(Path, ".") + 1) = "xls" Then
    Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Extended Properties=Excel 8.0;" _
      & "Data Source=" & Path & ";"
  ElseIf Mid(Path, InStrRev(Path, ".") + 1) Like "xls?" Then
    Con = "Provider=Microsoft.ACE.OLEDB.12.0;" _
      & "Extended Properties=""Excel 12.0;HDR=YES"";" _
      & "Data Source=" & Path & ";"
  Else
    Exit Function
  End If
  Set ExcelTable = CreateObject("ADODB.Recordset")
  ExcelTable.Open SQL, Con, 3, 1
End Function



« Gruß Sepp »

Anzeige
AW: Danke oT.
25.04.2012 19:50:53
HermannZ
.
;
Anzeige

Infobox / Tutorial

Letzte Zeile aus geschlossener Excel-Datei ermitteln


Schritt-für-Schritt-Anleitung

Um die letzte benutzte Zeile aus einer geschlossenen Excel-Datei zu ermitteln, kannst du den folgenden VBA-Code verwenden. Dieser öffnet die Datei im Hintergrund, ermittelt die letzte Zeile und schließt die Datei anschließend wieder.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deinProjektName)", wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Option Explicit

Sub Test()
    Dim strFile As String, strTab As String, strRef As String

    strFile = "C:\temp\test.xls" ' Dateipfad anpassen
    strTab = "Tabelle1" ' Tabellenname anpassen
    strRef = "A:A" ' Bereich anpassen

    MsgBox LastRowClosedFile(strFile, strTab, strRef)
End Sub

Private Function LastRowClosedFile(FileName As String, SheetName As String, TargetRange As String) As Long
    Dim objADO As Object
    On Error Resume Next
    Set objADO = ExcelTable(FileName, SheetName, TargetRange)
    LastRowClosedFile = objADO.RecordCount + 1
    objADO.Close
End Function

Private Function ExcelTable(ByRef Path As String, ByRef Table As String, ByRef SourceRange As String) As Object
    Dim SQL As String
    Dim Con As String

    SQL = "select * from [" & Table & "$" & SourceRange & "]"

    If Mid(Path, InStrRev(Path, ".") + 1) = "xls" Then
        Con = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Extended Properties=Excel 8.0;" & _
              "Data Source=" & Path & ";"
    ElseIf Mid(Path, InStrRev(Path, ".") + 1) Like "xls?" Then
        Con = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
              "Extended Properties=""Excel 12.0;HDR=YES"";" & _
              "Data Source=" & Path & ";"
    Else
        Exit Function
    End If

    Set ExcelTable = CreateObject("ADODB.Recordset")
    ExcelTable.Open SQL, Con, 3, 1
End Function
  1. Passe den Dateipfad, den Tabellennamen und den Bereich im Code an.
  2. Führe das Test-Makro aus, um die letzte Zeile zu ermitteln.

Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden"
    Lösung: Überprüfe den Dateipfad und stelle sicher, dass die Datei existiert.

  • Fehler: "Zugriff verweigert"
    Lösung: Stelle sicher, dass die Datei nicht von einem anderen Programm geöffnet ist.

  • Fehler: "Typen unverträglich"
    Lösung: Überprüfe, ob der Dateipfad und die Tabellennamen korrekt angegeben sind.


Alternative Methoden

Falls du die Datei nicht öffnen möchtest, kannst du auch eine CSV-Datei verwenden, die einfach zu lesen ist. Eine weitere Methode wäre, die Excel-Daten in eine Access-Datenbank zu importieren und dann die letzte Zeile über SQL-Abfragen zu ermitteln.


Praktische Beispiele

  1. Ermitteln der letzten Zeile in "Tabelle2": Ändere die Zeile strTab = "Tabelle1" in strTab = "Tabelle2".

  2. Bereich für mehrere Spalten: Wenn du den Bereich auf mehrere Spalten erweitern möchtest, passe strRef = "A:C" an.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False, um das Flackern des Bildschirms zu vermeiden, während die Datei geöffnet wird. Vergiss nicht, es am Ende wieder auf True zu setzen.

  • Überlege, wie du mit großen Datenmengen umgehen kannst. Möglicherweise möchtest du die Daten in einem separaten Arbeitsblatt aggregieren.


FAQ: Häufige Fragen

1. Kann ich die letzte Zeile ohne VBA ermitteln?
Nein, das Ermitteln der letzten Zeile aus einer geschlossenen Excel-Datei erfordert in der Regel VBA oder externe Tools.

2. Funktioniert dieser Code mit Excel 365?
Ja, der Code sollte in Excel 365 sowie anderen Versionen von Excel funktionieren, solange die VBA-Unterstützung aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige