Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1472to1476
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

VBA Macro um Inhalt eines Ordners auszulesen

VBA Macro um Inhalt eines Ordners auszulesen
29.01.2016 17:11:10
André
Hallo zusammen, mein erster Beitrag bei euch. Hoffe hier kann mir jemand weiterhelfen bzw. Tipps geben:
Folgender Sachverhalt:
Ich synchronisiere über mehrere Rechner hinweg Daten, eine xlsm fungiert dabei u.a. als Inhaltsverzeichnis. Um weitere Informationen über den Ordnerinhalt zu bekommen, habe ich ein VBA Makro der xlsm hinzugefügt, welche mir relevante Informationen anzeigt. Das funktioniert soweit ganz gut, sofern ich einen absoluten Ordnerpfad Const STRFOLDER As String = "D:\Projekte_Sync\" angebe; da ich jedoch wie o.g. die Daten über mehrere Rechner hinweg synchronisiere - sich dementsprechend die Pfade je nach Rechner unterscheiden - würde ich als Pfad gerne einen relativen Bezug angeben (ausgehend vom Ordner der Excel).
Das VBA Makro lautet wie folgt:
Public Sub Auto_Open()
Const STRFOLDER As String = "D:\Projekte_Sync\"
Dim objShell As Object, objFolder As Object
Dim bytIndex As Byte, intColumn As Integer, lngRow As Long
Dim varName, arrHeaders(37)
If Dir(STRFOLDER, 16) = "" Then
MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!", 64, "Hinweis"
Exit Sub
End If
Application.ScreenUpdating = False
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
intColumn = 1
For bytIndex = 0 To 37
arrHeaders(bytIndex) = objFolder.GetDetailsOf(varName, bytIndex)
Cells(1, intColumn + bytIndex) = arrHeaders(bytIndex)
Next
Rows(1).Font.Bold = True
lngRow = 2
For Each varName In objFolder.Items
For bytIndex = 0 To 37
Cells(lngRow, intColumn + bytIndex) = objFolder.GetDetailsOf(varName, bytIndex)
Next
lngRow = lngRow + 1
Next
Columns.AutoFit
Set objShell = Nothing
Set objFolder = Nothing
Application.ScreenUpdating = True
End Sub

Wie kann ich in der o.g. Zeile den Pfad für meine Bedürfnisse anpassen (habe hinsichtlich VBA nur rudimentäre Kenntnisse)?
Vielen Dank fürs Lesen,
André

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Macro um Inhalt eines Ordners auszulesen
29.01.2016 17:54:55
Nepumuk
Hallo,
an den Pfad in dem sich die Excelmappe befindet kommst du so:
Thisworkbook.Path
Gruß
Nepumuk

AW: VBA Macro um Inhalt eines Ordners auszulesen
29.01.2016 18:51:55
André
Hallo Nepumuk,
vielen Dank für deine Antwort. Damit habe ich es schon probiert, leider erhalte ich - sofern ich deinen Vorschlag folge - lediglich eine Warnung: "Fehler beim Kompelieren. Konstanter Ausdruck erforderlich".
Soweit ich es bisher verstanden habe, ist es nicht möglich die Konstante (Const) mit einer Variable zu "bedienen".

AW: VBA Macro um Inhalt eines Ordners auszulesen
29.01.2016 19:32:33
Nepumuk
Hallo,
so:
Public Sub Auto_Open()
    Dim STRFOLDER As String
    Dim objShell As Object, objFolder As Object
    Dim bytIndex As Byte, intColumn As Integer, lngRow As Long
    Dim varName, arrHeaders(37)
    STRFOLDER = ThisWorkbook.Path & "\"
    If Dir(STRFOLDER, 16) = "" Then
        MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!", 64, "Hinweis"
        Exit Sub
    End If
    Application.ScreenUpdating = False
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(STRFOLDER)
    intColumn = 1
    For bytIndex = 0 To 37
        arrHeaders(bytIndex) = objFolder.GetDetailsOf(varName, bytIndex)
        Cells(1, intColumn + bytIndex) = arrHeaders(bytIndex)
    Next
    Rows(1).Font.Bold = True
    lngRow = 2
    For Each varName In objFolder.Items
        For bytIndex = 0 To 37
            Cells(lngRow, intColumn + bytIndex) = objFolder.GetDetailsOf(varName, bytIndex)
        Next
        lngRow = lngRow + 1
    Next
    Columns.AutoFit
    Set objShell = Nothing
    Set objFolder = Nothing
    Application.ScreenUpdating = True
End Sub

Gruß
Nepumuk

Anzeige
AW: VBA Macro um Inhalt eines Ordners auszulesen
29.01.2016 20:00:02
André
Nochmal danke für deine schnellen Antworten!
Habe ich auch schon ausprobiert, ich bekomme dann jedoch immer den Fehler "Laufzeitfehler '91' Objektvariable oder With-Blockvariable nicht festgelegt".

AW: VBA Macro um Inhalt eines Ordners auszulesen
30.01.2016 09:43:01
Nepumuk
Hallo,
in welcher Zeile?
Gruß
Nepumuk

AW: VBA Macro um Inhalt eines Ordners auszulesen
30.01.2016 12:30:37
André
Hallo Nepumuk.
Der Fehler bezieht sich auf

arrHeaders(bytIndex) = objFolder.GetDetailsOf(varName, bytIndex)

AW: VBA Macro um Inhalt eines Ordners auszulesen
31.01.2016 11:19:13
Nepumuk
Hallo,
dann gibt es den Ordner nicht.
Gruß
Nepumuk

AW: VBA Macro um Inhalt eines Ordners auszulesen
31.01.2016 13:54:09
André
Hallo Nepumuk.
Aber wie kann das denn sein? Wenn ich die Excel irgendwo ablege, so gibt es doch immer einen Pfad. Habe es in diversen Ordnern versucht und der Fehler bleibt immer der gleiche. Wenn ich jedoch in das VBA Bearbeitungsfenster gehe und die Variable STRFOLDER mit dem Cursor "überfliege" so zeigt er mich auch den richtigen Pfad an (z.B. C:\Test).
Gruß,
André

Anzeige
AW: VBA Macro um Inhalt eines Ordners auszulesen
31.01.2016 14:10:46
André
Hab es gelöst. Wenn Variant benutzt wir

Public Sub Auto_Open()
Dim STRFOLDER As Variant

läuft es ohne Probleme.
Nochmals tausend Dank Nepumuk, dass du etwas von deiner Zeit für mich entbehren konntest. Tolles Forum.
Anbei noch das funktionsfähige Makro:
Public Sub Auto_Open()
Dim STRFOLDER As Variant
Dim objShell As Object, objFolder As Object
Dim bytIndex As Byte, intColumn As Integer, lngRow As Long
Dim varName, arrHeaders(37)
STRFOLDER = ThisWorkbook.path & "\"
If Dir(STRFOLDER, 16) = "" Then
MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!", 64, "Hinweis"
Exit Sub
End If
Application.ScreenUpdating = False
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
intColumn = 1
For bytIndex = 0 To 37
arrHeaders(bytIndex) = objFolder.GetDetailsOf(varName, bytIndex)
Cells(1, intColumn + bytIndex) = arrHeaders(bytIndex)
Next
Rows(1).Font.Bold = True
lngRow = 2
For Each varName In objFolder.Items
For bytIndex = 0 To 37
Cells(lngRow, intColumn + bytIndex) = objFolder.GetDetailsOf(varName, bytIndex)
Next
lngRow = lngRow + 1
Next
Columns.AutoFit
Set objShell = Nothing
Set objFolder = Nothing
Application.ScreenUpdating = True
End Sub

Beste Grüße aus Nürnberg,
André
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige