Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1736to1740
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

Tabellenblatt im Ordner suchen?

Tabellenblatt im Ordner suchen?
25.01.2020 14:25:42
Fred

Hallo Excel-Profis,
ich habe eine Frage;
Ist es möglich, mit Excel-VBA eine Mappe in Ordner (einschließlich Unterordner) zu suchen, deren Inhalt das Sheet "Auswahl1" beinhaltet und diese Mappe dann öffnet?
evt. sind es mehrere Arbeitsmappen.
Gruß
Fred

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt im Ordner suchen?
25.01.2020 15:00:30
Fred
Hallo Hajo,
nach dem öffnen habe ich das "PtrSafe" hinzugefügt.
Wenn ich nun ein Verzeichnis auswähle, stürzt Excel ab.
Gruß
Fred
AW: Tabellenblatt im Ordner suchen?
25.01.2020 15:02:37
Hajo_Zi
Hallo Fred,
dazu kann ich nichts schreiben, was wohl daerran liegt das ich nicht auf Deinen REchner schaue und damit nicht sehe wo Du das "PtrSafe" hinzugerfügt hast.
Frage jemand der neben Dir sitzt, der sieht die Dateiu.
Gruß Hajo
Anzeige
AW: Tabellenblatt im Ordner suchen?
25.01.2020 15:08:33
Fred
Naja Hajo,
neben mir sitzt nur die Maus :-)
https://www.herber.de/bbs/user/134699.xlsm
sehe gerade, dass Nepumuk mir VBA-Code zugeschickt hat, werde den mal testen.
Gruß
Fred
AW: Tabellenblatt im Ordner suchen?
25.01.2020 15:02:27
Nepumuk
Hallo Fred,
teste mal:
Option Explicit

Private Const FOLDER_PATH As String = "G:\Eigene Dateien\" 'Anpassen
Private Const SHEET_NAME As String = "Auswahl1"

Public Sub Beispiel()
    
    Dim astrFolders() As String, strFileName As String
    Dim ialngFolders As Long
    Dim objWorkbook As Workbook
    
    astrFolders = GetFolders(FOLDER_PATH)
    
    For ialngFolders = LBound(astrFolders) To UBound(astrFolders)
        
        strFileName = Dir$(astrFolders(ialngFolders) & "*.xls*")
        
        Do Until strFileName = vbNullString
            
            If SearchSheet(astrFolders(ialngFolders) & strFileName) Then
                
                Set objWorkbook = Workbooks.Open(Filename:=astrFolders(ialngFolders) & strFileName)
                
                Stop ' mach was mit dem Workbook
                
                Call objWorkbook.Close(SaveChanges:=False)
                
            End If
            
            strFileName = Dir$
            
        Loop
    Next
End Sub

Private Function GetFolders(ByVal pvstrPath As String) As String()
    
    Dim astrFolders() As String
    Dim strFolder As String, strPath As String
    Dim ialngIndex1 As Long, ialngIndex2 As Long
    
    Redim Preserve astrFolders(ialngIndex1)
    
    astrFolders(ialngIndex1) = pvstrPath
    
    ialngIndex1 = 1
    ialngIndex2 = 1
    
    strPath = pvstrPath
    
    Do
        
        strFolder = Dir$(PathName:=strPath & "*", Attributes:=vbDirectory)
        
        Do Until strFolder = vbNullString
            
            If strFolder <> "." And strFolder <> ".." Then
                
                If GetAttr(PathName:=strPath & strFolder) And vbDirectory Then
                    
                    Redim Preserve astrFolders(0 To ialngIndex1)
                    astrFolders(ialngIndex1) = strPath & strFolder & "\"
                    ialngIndex1 = ialngIndex1 + 1
                    
                End If
            End If
            
            strFolder = Dir$
            
        Loop
        
        If ialngIndex1 = ialngIndex2 Then Exit Do
        
        strPath = astrFolders(ialngIndex2)
        ialngIndex2 = ialngIndex2 + 1
        
    Loop
    
    GetFolders = astrFolders
    
End Function

Private Function SearchSheet(ByVal pvstrPath As String) As Boolean
    
    Dim objConnection As Object, objCatalog As Object
    Dim strConnection As String
    Dim objTables As Object
    Dim avntTemp As Variant
    
    avntTemp = Split(pvstrPath, ".")
    
    Select Case LCase$(avntTemp(UBound(avntTemp)))
        Case "xlsm"
            strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & pvstrPath & ";" & _
                "Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=0"""
        Case "xlsx"
            strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & pvstrPath & ";" & _
                "Extended Properties=""Excel 12.0 Xml;HDR=No;IMEX=0"""
        Case "xlsb"
            strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & pvstrPath & ";" & _
                "Extended Properties=""Excel 12.0;HDR=No;IMEX=0"""
        Case "xls"
            strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & pvstrPath & ";" & _
                "Extended Properties=""Excel 8.0;HDR=No;IMEX=0"""
        Case Else
            Call MsgBox("Unbekannter Dateityp", vbCritical, "Fehler")
            Exit Function
    End Select
    
    Set objConnection = CreateObject("ADODB.Connection")
    
    Call objConnection.Open(strConnection)
    
    Set objCatalog = CreateObject("ADOX.Catalog")
    Set objCatalog.ActiveConnection = objConnection
    
    For Each objTables In objCatalog.Tables
        
        With objTables
            
            If Left$(.Name, Len(.Name) - 1) = SHEET_NAME Then
                
                SearchSheet = True
                Exit For
                
            End If
        End With
    Next
    
    objConnection.Close
    
    Set objTables = Nothing
    Set objCatalog = Nothing
    Set objConnection = Nothing
    
End Function

Gruß
Nepumuk
Anzeige
AW: Tabellenblatt im Ordner suchen?
25.01.2020 15:32:56
Fred
Hallo Nepumuk,
das Makro sucht und findet tatsächlich die Mappe mit entsprechenden Tabellenblatt.
Wird Mappe/Tabellenblatt gefunden, wird das VBA angezeigt mit gelb hinterlegten Text "Stop ' mach was mit dem Workbook".
Ansich ist das OK, allerdings wenn ich mehrere Mappen mit entsprechenden Tabellblatt habe, werden die evt. anderen Sheets nicht geöffnet.
Wenn ich die Zeile "Stop ' mach was mit dem Workbook" lösche,
im Ordner ist entsprechende Mappe/Tabellenblatt 3x vertreten, dann
blinkt mein ausführendes Sheet auch 3x auf (als ob etwas geöffnet wurde, allerdings ist nichts offen)
Bei einem Treffer funzt es prima.
Gruß
Fred
Anzeige
AW: Tabellenblatt im Ordner suchen?
25.01.2020 15:36:53
Nepumuk
Hallo Fred,
diese Zeile:
Call objWorkbook.Close(SaveChanges:=False)
schließt das Workbook wieder. Die musst du auch löschen. Ich wusste ja nicht dass du das ganze dann manuell machst.
Gruß
Nepumuk
AW: Tabellenblatt im Ordner suchen?
25.01.2020 15:46:00
Fred
Hallo Nepumuk,
zeitgleich mit deiner Antwort hatte ich ebenfalls den Gedanken,
"Stop ' mach was mit dem Workbook"
"Call objWorkbook.Close(SaveChanges:=False)"
zu löschen.
Das Egebnis ist nun wie gewünscht.
Herzlichen Dank für die Mühe und Aufmerksamkeit!
Gruß
Fred

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige