VBA Tipp: Dateipfad zerlegen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte einen Dateipfad in Einzelteile zerlegen, und die einzelnen Teile anzeigen:

  • Laufwerksbuchstabe
  • Ordnerpfad
  • Dateiname mit Erweiterung
  • Dateiname ohne Erweiterung
  • Datei-Erweiterung


Lösung 1: FileSystemObject

Das geht mit dem FileSystemObject mit folgender Enumeration und VBA-Funktion, die in einem globalen Modul hinterlegt wird.

Public Enum Pfadteile
   Datei_Laufwerksbuchstabe
   Datei_Ordnerpfad
   Datei_DateinameMitErweiterung
   Datei_DateinameOhneErweiterung
   Datei_Erweiterung
End Enum
 
Public Function PfadZerlegen(Pfad As String, ByVal Pfadteil As Pfadteile) As String
 
   'Late Binding, kein Verweis auf "Microsoft Scripting Runtime" notwendig
   'Quelle: www.dbwiki.net oder www.dbwiki.de
 
   With CreateObject("Scripting.FileSystemObject")
      Select Case Pfadteil
 
         Case Pfadteile.Datei_Laufwerksbuchstabe
            PfadZerlegen = .GetDriveName(Pfad)
 
         Case Pfadteile.Datei_Ordnerpfad
            PfadZerlegen = .GetParentFolderName(Pfad)
 
         Case Pfadteile.Datei_DateinameMitErweiterung
            PfadZerlegen = .GetFileName(Pfad)
 
         Case Pfadteile.Datei_DateinameOhneErweiterung
            PfadZerlegen = .GetBaseName(Pfad)
 
         Case Pfadteile.Datei_Erweiterung
            PfadZerlegen = .GetExtensionName(Pfad)
 
      End Select
   End With
 
End Function

Aufruf

   Dim strPfad As String
 
   strPfad = "C:\Program Files (x86)\Microsoft Office\Office14\WINWORD.EXE"
   ' Der Pfad kann auch ein Internet-Pfad sein (da gibt es nur keinen Laufwerksbuchstaben)
   ' strPfad = "http://www.meinedomain.de/meinordner/meinunterordner/bestellung.php"
 
   'Beispiele
   MsgBox PfadZerlegen(strPfad, Datei_Laufwerksbuchstabe)
   MsgBox PfadZerlegen(strPfad, Datei_Ordnerpfad)
   MsgBox PfadZerlegen(strPfad, Datei_DateinameMitErweiterung)
   MsgBox PfadZerlegen(strPfad, Datei_DateinameOhneErweiterung)
   MsgBox PfadZerlegen(strPfad, Datei_Erweiterung)

Lösung 2: VBA-Funktionen

Das geht auch mit VBA-internen Funktionen.

   Dim strPfad        As String
   Dim strLaufwerk    As String
   Dim strVerzeichnis As String
   Dim strDateiname   As String
   Dim strDateiendung As String
 
   strPfad = "C:\Program Files (x86)\Microsoft Office\Office14\WINWORD.EXE"
 
   'Laufwerk
   If Mid(strPfad, 2, 1) = ":" Then
      strLaufwerk = Left(strPfad, 2)
   Else
      strLaufwerk = vbNullString
   End If
   MsgBox "Laufwerk: " & strLaufwerk
 
   'Verzeichnis
   strVerzeichnis = Left(strPfad, InStrRev(strPfad, "\") - 1)
   MsgBox "Verzeichnis: " & strVerzeichnis
 
   'Dateiname
   strDateiname = Mid(strPfad, InStrRev(strPfad, "\") + 1)
   MsgBox "Dateiname: " & strDateiname
 
   'Dateiendung
   If InStrRev(strPfad, ".") = 0 Then
      strDateiendung = ""
   Else
      strDateiendung = Mid(strPfad, InStrRev(strPfad, "."))
   End If
   MsgBox "Dateiendung: " & strDateiendung

Weblinks