2
www.ChF-Online.de  

Pfade und Verzeichnisse

   Neuigkeiten
   API-Aufrufe in VBA
 Belieb. Datei öffnen
 CommonDialog-Fehler
 Dateidatum lesen & setzen
 rel. Dateipfad korrigieren
 Flex. Öffnen-Dialog
 Flex. Speichern-Dialog
 Kurze Unterbrechung
aktiv aktiv Pfade und Verzeichnisse
 Spracheinstellung
 TreeView löschen
 Verzeichnisauswahl
 Verzeichnisauswahl /UNC
   VBA2HTML
   Word
   Word-VBA
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
Getestet unter Word2000Getestet unter WordXPGetestet unter Win2000  
Makro/Datei speichern
Print

Bei der Verwendung von Verzeichnisnamen und Dateipfaden, z.B. zum Öffnen von Dateien oder beim Überprüfen, ob Verzeichnisse vorhanden sind, ist eine korrekte Syntax wichtig. So verlangt die Dir-Funktion keinen abschließenden Backslash wenn ein Verzeichnis überprüft wird, wärend ein Backslash bei der Dateinamenssuche im Verzeichnis notwendig ist.
So liefert der folgendem Aufruf den existierenden Ordnernamen zurück,

Debug.Print Dir("C:\temp",vbDirectory )
> temp 

während mit Backslash der erste Dateieintrag im Ordner zurückgeliefert wird (sofern der Ordner existiert)

Debug.Print Dir("C:\temp\",vbDirectory )
> . 

Ein weiteres Problem tritt bei der Kombination von Pfad und Dateinamen bzw. bei zwei Ordnernamen auf: Es muss sichergestellt werden, dass der Gesamtpfad korrekt gesetzte Backslashes beinhaltet. Normalerweise müssten händisch beide Pfadteile auf beginnende bzw. endende Backslashes überprüft werden, bevor sie kombiniert werden können, da ansonsten Fehler auftreten können.

Debug.Print "C:\temp" & "Test.doc"
> C:\tempTest.doc
Debug.Print "C:\temp\" & "\Test.doc"
> C:\temp\\Test.doc 

Um all diese Probleme in den Griff zu bekommen, kann man auf einen Satz von API-Funktionen zurückgreifen, die sich um die korrekte Kombination und Erstellung von Pfaden kümmern.

Zur besseren Handhabung dieser APIs wird der Aufruf jeweils in einer Funktion gekapselt, die sich um den Aufruf und die korrekte Anwendung kümmert.
Die Funktion StripTerminator kümmert sich um das Reduzieren des angelegten Buffers. Diese Buffer müssen angelegt werden, damit das Ergebnis in der angegebenen Variablen Platz findet; ist der Buffer zu klein, wird das Ergebnis abgeschnitten.

Function apiPathCombine(sPath1, sPath2) As String 
Dim sPath As String 
sPath = String(255, vbNullChar)
PathCombine sPath, sPath1, sPath2
apiPathCombine = StripTerminator(sPath)
End Function 
'
Function apiAddSlash(ByVal sString As String) As String  
sString = sString & String(100, vbNullChar)
PathAddBackslash sString
apiAddSlash = StripTerminator(sString)
End Function 
'
Function apiAddSlash(ByVal sString As String) As String  
sString = sString & String(100, vbNullChar)
PathAddBackslash sString
apiAddSlash = StripTerminator(sString)
End Function 
'Entfernt alle auffüllenden Bufferzeichen Chr$(0) 
Function StripTerminator(sInput As String) As String  
Dim ZeroPos As Long 
ZeroPos = InStr(1, sInput, vbNullChar)
If ZeroPos > 0 Then 
  StripTerminator = Left$(sInput, ZeroPos - 1)
Else 
  StripTerminator = sInput
End If 
End Function  

Der Aufruf erfolgt dann über diese Funktion, der die beiden zu kombinierenden Pfade als Parameter mit gegeben wird. Als Rückgabewert erhält man den kompletten Pfad.

Sub Pfadkombinieren()
Dim ret, sPfad1, sPfad2 As String 
sPfad1 = "C:" ' oder "C:\"
' sPfad2 muss relativ zu sPfad1 angegeben werden, ansonsten wird
' er absolut zur Wurzel von sPfad1 angegeben
sPfad2 = "temp" ' oder "\temp"
ret = apiPathCombine(sPfad1, sPfad2)
'liefert C:\temp
'aber  
sPath1 = "C:\temp\"
sPfad2 = "\temp1"
ret = apiPathCombine(sPath, sPfad2)
'liefert C:\temp1
End Sub 
'
Sub Pfadabschließen()
Dim ret, sPfad1 As String 
sPfad1 = "C:\temp"
ret = apiAddSlash(sPfad1)
'liefert C:\temp\
End Sub 
'
Sub PfadmitDateikombinieren()
Dim ret, sPfad, sFile As String 
sPfad = "C:\temp\"
sFile = "\test.doc"
ret = apiAppendFile(sPfad, sFile)
'liefert C:\temp\test.doc
End Sub 

 Besucher: 2 online  |  23 heute  |  2384 diesen Monat  |  2149344 insgesamt | Seitenaufrufe: 68   Letzte Änderung: 24.06.2006 © 2001-18 Christian Freßdorf
  Die Wahrheit läuft meist am Rande, nicht in der Mitte.
Henry Miller
 powered by phpCMS and PAX