Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

VBA Links im Verzeichnis auslesen


Betrifft: VBA Links im Verzeichnis auslesen von: ImpCaligula
Geschrieben am: 09.09.2019 15:27:34

Salve!

Ich habe folgendes Problem. Ich möchte auf meiner Arbeit ein Excel Makro erstellen, bei dem ich bei Aufruf / Start ein Verzeichnis / Ordner auswähle und er mir alle Dateien - als Beispiel - von A1 bis A100 auflistet.

Das klappt auch bei "normalen" Verzeichnissen wunderbar.
Wenn ich den Ordner Test auf dem Desktop auswähle, bekomme ich als Ergebnis in den Zellen die Auflistung aller Dateien in diesem Ordner.

A1: textdatei1.doc
A2: textdatei2.docx
A3: textdatei3.rtf
A4: exceldatei1.xlsx

Und so weiter.

Nun aber zum eigentlichen Problem. Wir haben da ein Dokumenten Management System (ECM) welches Word und Excel Dateien archiviert werden. Im Windows Explorer kann ich mir das ECM Verzeichnis auch anschauen und bei allen Anwendungen auch über Datei / Öffnen auch auf dieses Verzeichnis zugreifen.

/ecm/meinefirma/Dokumente/Datei12345
/ecm/meinefirma/Dokumente/Datei12346
/ecm/meinefirma/Dokumente/Datei12347
/ecm/meinefirma/Dokumente/einetestdatei.docx
/ecm/meinefirma/Dokumente/Datei12348
/ecm/meinefirma/Dokumente/Datei12349

Wenn man als Beispiel die Datei "Datei12345" im Windows Explorer anklickt wird auch WOPRD geöffnet und nicht erst das ECM System und darin die Word Datei. Wenn ich mein Makro starte nun auf dieses Beispiel Verzeichnis - dann bekomme ich als Ergebnis nur einen Treffer.

A1: einetestdatei.docx

Die anderen Dateien werden nicht aufgelistet.
Hat jemand eine Idee wie ich unter VBA mir diese "Dateien" anzeigen lassen kann?
Es scheint so als handle es sich hier um hinterlegte "Links" in dem Verzeichnis.

Für jede Hilfe sehr dankbar.

  

Betrifft: AW: VBA Links im Verzeichnis auslesen von: 1712045.html
Geschrieben am: 09.09.2019 16:17:54

Hallo,

versuch es mal so:

Option Explicit

Public Sub Verknuepfungen_auslesen()
    
    Dim objShell As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim objLink As Object
    
    Set objShell = CreateObject(Class:="Shell.Application")
    
    Set objFolder = objShell.Namespace("C:\Dokumente und Einstellungen\HP\Desktop\")
    
    For Each objFile In objFolder.Items
        
        If objFile.IsLink Then
            
            Set objLink = objFile.GetLink
            
            With objLink
                
                Call MsgBox(.Path & vbLf & .Target.Path & vbLf & .Description)
                
            End With
        End If
    Next
    
    Set objLink = Nothing
    Set objFolder = Nothing
    Set objShell = Nothing
    
End Sub

Gruß
Nepumuk
  

Betrifft: AW: VBA Links im Verzeichnis auslesen von: 1712095.html
Geschrieben am: 09.09.2019 20:16:46

Hallo Nepumuk,

erst einmal ganz herzlichen Dank, dass Du Dich meines Problems angenommen hast. An sich scheint das Makro zu funktionieren, jedoch nur, wenn ich den Pfad "Hardcode" eingebe.

Funktioniert:
Set objFolder = objShell.Namespace("C:\Dokumente und Einstellungen\HP\Desktop\")

Funktioniert nicht:
MyPath = ""C:\Dokumente und Einstellungen\HP\Desktop\"
Set objFolder = objShell.Namespace(MyPath)

Hintergrund ist, dass ich den Verzeichnis Pfad gerne über den FolderDialog relativ mit einer Variablen halten möchte. Hier noch eine Idee?

  

Betrifft: AW: VBA Links im Verzeichnis auslesen von: 1712100.html
Geschrieben am: 09.09.2019 20:41:06

Hallo,

als welcher Variablentyp hast du MyPath dimensioniert? Das muss unbedingt ein String sein!

Gruß
Nepumuk

  

Betrifft: AW: VBA Links im Verzeichnis auslesen von: 1712110.html
Geschrieben am: 09.09.2019 21:55:31

 
 Dim objShell As Object
 Dim objFolder As Object
 Dim objFile As Object
 Dim objLink As Object
 Dim strPfad As String
 
 strPfad = "C:\Users\Hans Meier\Desktop\"
 
 Set objShell = CreateObject(Class:="Shell.Application")
 Set objFolder = objShell.Namespace(strPfad)
     
 For Each objFile In objFolder.Items
     
     If objFile.IsLink Then
         Set objLink = objFile.GetLink
             
         With objLink
             intI = intI + 1
             MsgBox (.Path & vbLf & .Target.Path & vbLf & .Description)
         End With
         End If
 Next
     
 Set objLink = Nothing
 Set objFolder = Nothing
 Set objShell = Nothing
 
Schau mal bitte Nepumuk. So lautet der Code im Original.

Wenn ich den Pfad in Anführungszeichen direkt bei Namespace rein schreibe - geht das Makro durch. Wenn ich eine Variable nehme, dann blockiert er. Deklariert ist es als String.

Die Fehlermeldung ist:
Laufzeitfehler 91 - Objektvariable oder With Blockvariable nicht festgelegt.

Fehler tritt aber erst auf, sobald in der Namespace Zeile statt Hardcode die Variable der Platzhalter ist.
  

Betrifft: AW: VBA Links im Verzeichnis auslesen von: 1712151.html
Geschrieben am: 10.09.2019 08:22:32

Hallo,

mein Fehler, tut mir leid. Die Variable muss als Variant deklariert sein. Also:

Option Explicit

Public Sub Verknuepfungen_auslesen()
    
    Dim objShell As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim objLink As Object
    Dim vntFolder As Variant
    
    vntFolder = "H:\0909\"
    
    Set objShell = CreateObject(Class:="Shell.Application")
    
    Set objFolder = objShell.Namespace(vntFolder)
    
    For Each objFile In objFolder.Items
        
        If objFile.IsLink Then
            
            Set objLink = objFile.GetLink
            
            With objLink
                
                Call MsgBox(.Path & vbLf & .Target.Path & vbLf & .Description)
                
            End With
        End If
    Next
    
    Set objLink = Nothing
    Set objFolder = Nothing
    Set objShell = Nothing
    
End Sub

Gruß
Nepumuk

Beiträge aus dem Excel-Forum zum Thema "VBA Links im Verzeichnis auslesen"