Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1172to1176
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Geschlossene Excel-Dateien prüfen

Geschlossene Excel-Dateien prüfen
Timo
Hallo zusammen,
ich bin am verzweifeln.
Ich habe einen Ordner mit ca. 200 Excel Dateien.
Nun möchte ich gerne alle diese Dateien prüfen, ob ein bestimmtes Tabellenblatt vorhanden ist.
Gibt es dafür eine Lösung per VBA?
Ich stelle mir das so vor, dass ich eine extra Excel Datei mit dem VBA Code habe.
Von dort aus werden alle Dateien in dem besagten Ordner geprüft (wenn möglich, ohne diese Dateien zu öffnen). Alle Dateien in denen das gesuchte Tabellenblatt nicht vorkommt, werden dann aufgelistet.
Ich hoffe Ihr könnt mir helfen...
Gruß Timo
AW: Geschlossene Excel-Dateien prüfen
14.08.2010 18:22:38
Hajo_Zi
Hallo Timo,
ich kann mich ja irren, aber ih glaube das nekommst Du ohne öffnen nicht hin.
Oder Du mußt aufwendig aus der Geschloosen Datei aus der Tabelle einen Wert auslesen und falls dies zu einem Fehler führt ist die Tabelle nicht da.

AW: Geschlossene Excel-Dateien prüfen
14.08.2010 18:26:41
ransi
HAllo Timo
Dies könnte ein Ansatz sein:
Gesucht wird nach dem Blatt "Tabelle1" in jeder excelDatei in deinem Ordner.
Option Explicit

Const ordner = "C:\DeinPfad\"
Const Blattname As String = "Tabelle1"

Public Sub test()
Dim FSO As Object
Dim Datei As Object
Dim L As Long
On Error Resume Next
Set FSO = CreateObject("Scripting.FilesystemObject")
For Each Datei In FSO.getfolder(ordner).Files
    If LCase(FSO.getextensionname(Datei)) = "xls" Then
        Cells(1, 2).FormulaLocal = "='" & ordner & "[" & Datei.Name & "]" & Blattname & "'!A1"
        If Err > 0 Then
            L = L + 1
            Err.Clear
            Cells(L, 1) = Datei.Name
        End If
    End If
Next
End Sub


Den Dialog einfach mit abbrechen wegclicken.
ransi
Anzeige
AW: Geschlossene Excel-Dateien prüfen
14.08.2010 18:44:54
Timo
Hallo Hajo,
ich habe noch ein bisschen rumgestöbert und bin auf die "Public Function GetDataClosedWB..."
gestoßen, die mit "Public Sub HoleDaten()" ausgelöst wird. (Ich denke Du weißt, was ich meine)
Wenn in einer der zu importierenden Dateien das angegebene Tabellenblatt nicht vorhanden ist, geht immer ein Fenster auf, in dem man dann das Tabellenblatt auswählen muss, wo sich die zu importierenden Daten befinden.
Kann man das irgendwie umgehen, dass die Datei, in der das Tabellenblatt nicht vorhanden ist, einfach ignoriert wird?
Das würde mir schon sehr helfen...
Vielen Dank auch an Ransi, aber das ist nicht so das, was ich gesucht habe...
Gruß Timo
Anzeige
AW: Geschlossene Excel-Dateien prüfen
14.08.2010 18:48:19
fcs
Hallo Timo,
hier als Abfallprodukt eines anderen Großprojekts.
Die Dateien im Verzeichnis werden schreibgeschützt geöffnet.
Fortschritt wird in Statuszeile angezeigt.
Gruß
Franz
https://www.herber.de/bbs/user/71070.xls
@Franz, und bin Dir sehr sehr dankbar dafür!
14.08.2010 19:17:27
silex1
Hallo Franz,
denn das Großprojekt erspart mir ungemein das nervige Suchen nach den Belegen.
Danke Dir nochmals, ;-))
VG, Rene
AW: Geschlossene Excel-Dateien prüfen
14.08.2010 21:33:46
Josef

Hallo Timo,
probier mal folgenden Code.
Er schreibt die Dateien, in denen das gesuchte Tabellenblatt nicht vorhanden ist, ab Zeile 2 in Spalte A auf dem aktiven Tabellenblatt.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub CheckSheetInFiles()
  Dim strPath As String, strFile As String, strSheetname As String
  Dim vntSheets As Variant, vntRet As Variant
  Dim lngRow As Long
  
  strPath = "E:\Office\Excel" 'Pfad - anpassen!
  
  strPath = IIf(Right(strPath, 1) <> "\", strPath & "\", "")
  
  strSheetname = "Tabelle1" 'gesuchtes Tabellenblatt - anpassen!
  
  lngRow = 2
  
  strFile = Dir(strPath & "*.xls*")
  
  With ActiveSheet
    Do While strFile <> ""
      vntSheets = GetSheetNames(strPath & strFile)
      vntRet = Application.Match(strSheetname, vntSheets, 0)
      If IsError(vntRet) Then
        .Cells(lngRow, 1) = strFile
        lngRow = lngRow + 1
      End If
      strFile = Dir
    Loop
  End With
  
End Sub

Private Function GetSheetNames(ByVal FileName As String) As Variant
  'original by Bob Phillips, adapted by j.ehrensberger
  Dim objADO_Connection As Object, objADO_Catalog As Object, objADO_Tables As Object
  Dim lngIndex As Long, intLength As Integer, intPos As Integer, intStart As Integer
  Dim strConString As String, strTable As String
  Dim vntTmp() As Variant
  
  'If Dir(FileName, vbNormal) = "" Then Exit Function
  
  On Error Resume Next
  
  If Mid(FileName, InStrRev(FileName, ".") + 1) = "xls" Then
    strConString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Extended Properties=Excel 8.0;" & _
      "Data Source=" & FileName & ";"
  ElseIf Mid(FileName, InStrRev(FileName, ".") + 1) Like "xls?" Then
    strConString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Extended Properties=""Excel 12.0;HDR=YES"";" _
      & "Data Source=" & FileName & ";"
  Else
    Exit Function
  End If
  
  Set objADO_Connection = CreateObject("ADODB.Connection")
  objADO_Connection.Open strConString
  Set objADO_Catalog = CreateObject("ADOX.Catalog")
  Set objADO_Catalog.ActiveConnection = objADO_Connection
  
  For Each objADO_Tables In objADO_Catalog.Tables
    strTable = objADO_Tables.Name
    intLength = Len(strTable)
    intPos = 0
    intStart = 1
    'Worksheet name with embedded spaces enclosed by single quotes
    If Left(strTable, 1) = "'" And Right(strTable, 1) = "'" Then
      intPos = 1
      intStart = 2
    End If
    'Worksheet names always end in the "$" character
    If Mid$(strTable, intLength - intPos, 1) = "$" Then
      Redim Preserve vntTmp(lngIndex)
      vntTmp(lngIndex) = Mid$(strTable, intStart, intLength - (intStart + intPos))
      lngIndex = lngIndex + 1
    End If
  Next objADO_Tables
  
  If lngIndex > 0 Then GetSheetNames = vntTmp
  
  objADO_Connection.Close
  
  On Error GoTo 0
  
  Set objADO_Catalog = Nothing
  Set objADO_Connection = Nothing
  
End Function

Gruß Sepp

Anzeige
AW: Geschlossene Excel-Dateien prüfen
15.08.2010 00:37:11
Timo
Hallo Sepp,
Dein Code funktioniert super, genau wie ich es mir vorgestellt habe!
Vielen, Vielen Dank!!!
Gruß Timo
Wieso so kompliziert?
15.08.2010 11:44:17
JogyB
Hallo Timo,
mal eine recht kurze Lösung:
Sub sucheBlatt()
Const pFad = "c:\temp\test\4\"
Const suchName = "TestTab"
Const schreibSpalte = 1 ' Spalte A
Dim daTei As String
Dim schreibZeile As Long
' schreibt ab Zeile 2
schreibZeile = 2
daTei = Dir(pFad & "*.xls")
While daTei  ""
If IsError(GetValue(pFad, daTei, suchName, "A1")) Then
' Schreibt in das erste Sheet dieser Arbeitsmappe
ThisWorkbook.Sheets(1).Cells(schreibZeile, schreibSpalte).Value = daTei
schreibZeile = schreibZeile + 1
End If
daTei = Dir
Wend
End Sub
' Liest Werte aus geschlossenen Dateien
Private Function GetValue(ByVal path As String, ByVal file As String, _
ByVal sheet As String, ByVal ref As String)
' Excel4Macro ausführen
Application.DisplayAlerts = False
GetValue = ExecuteExcel4Macro("'" & path & "[" & file & "]" & sheet & _
"'!" & Range(ref).Cells(1, 1).Address(, , xlR1C1))
Application.DisplayAlerts = True
End Function
Gruß, Jogy
Anzeige
AW: Wieso so kompliziert?
15.08.2010 13:05:51
Timo
Hallo Jogy,
Dein Code funktioniert auch prima.
Jetzt habe ich die Qual der Wahl ;-)
Vielen Dank Euch allen!
Gruß Timo
AW: Wieso so kompliziert?
15.08.2010 17:55:47
Peter.H
Hallo Jogy
nur als Info... Deine Lösung ist die schnellste
Sepp's Lösung hat den Charm, dass sie auch Passwortgeschützte Dateien ohne weiteren Eingriff bearbeitet.
Gruß
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige