Access-Paradies im Internet

Die Excel-VBA-CD Vol. 1 - 1.000 Makros für die Praxis für Microsoft Excel 97-2003 - Profisuche nach Aufgaben und Befehlen - Vollversion des MS-Office-Forum Offline Readers mit über 500.000 Beiträgen, Antworten, Lösungen und Codebeispielen - Nur 24,95 EUR
 

  

::: Funktionen

 


Die Top Seite für Excel-VBA-Makros uvm.
Anwenderforum für Microsoft Office, Windows, VB
FAQ, kostenlose Tipps und Downloads zu Microsoft Office
Das große Visual-Basic Archiv
Access-Garhammer
Rainer's Archiv

::: Newsletter

 

Unser Newsletter informiert Sie topaktuell rund um alle Themen zu Microsoft Access, VBA usw.

 
  




::: ebay

 
1.000 Tage eBay Partnerprogramm - Volume II
 

34

 
  Tipps & Tricks -> Dateisystem / Laufwerk -> Dateipfad zerlegen   



Kostenlose Tools und aktuelle News mit unserem monatlichen Access-Newsletter.
Jetzt eintragen!




von Günther Kramer

Mausrad im Formular abschalten

Der VBA-Code schaltet innerhalb eines Formulars das Mausrad ab



Mails senden, abrufen und decodieren - ganz easy ;-)

Das SMTP Control sendet, das POP3 Control empfängt und der Mail-Parser (Klassenobjekt) decodiert empfangene Mails im Handumdrehen - natürlich unter Berücksichtigung von Multi-Part MIME Nachrichten, Anlagen u.v.m.



Das Access-VBA Codebook

Neue Ausgabe!




Die VBA-Codesammlung, die bei keinem Entwickler
fehlen darf!

 
   
 
 
 
  Dateipfad zerlegen
Kurzinfo: Dieser Tipp zeigt, wie man den Dateipfad zerlegen kann. Man erhält den Laufwerksbuchstabe, Verzeichnispfad, Dateiname und die Dateierweiterung.
Access-Version(en): Access 97, 2000 und XP
Autor: Stefan Kulpa
Homepage: http://www.kulpa-online.de

 
 

 

Auf der AP-Access-Tools Vol.1 finden Sie weitere 320 Tipps & Tricks sowie 250 Access-Beispiel/Anwendungen mit offenen Quellcode!

Die Access-Tools-CD mit über 400 MByte Inhalt - für Access- und VB-Entwickler

  • 256 Access-Beispiele mit offenem Code
  • 45 Add-Ins und ActiveX-Komponenten (Freeware)
  • 16 VB-Projekt inkl. Source
  • 321 Tipps & Tricks für Access und VB
  • Plus 11 Entwicklerversionen (9 davon mit Source!)
  • Plus 3 Vollversionen und
  • Plus riesiger Datenpool

    Holen Sie sich jetzt Ihre AP-Access-Tools-CD zum Superpreis von nur EUR 24,95!

  •  
     

    Oft steht man vor dem Problem, einen kompletten Dateipfad vorliegen zu haben, aus dem man allerdings nur einen Teil benötigt. Generell setzt sich ein Dateipfad aus vier Teilen zusammen:

    1. Laufwerksbuchstabe
    2. Verzeichnispfad
    3. Dateiname
    4. Dateierweiterung

    Um nun diesen Pfad in seine Einzelteile zerlegen zu können, kann man auf verschiedene Art und Weise vorgeben:

    Lösung 1: Nutzung des Windows Scripting Host
    Um den Windows Scripting Host benutzen zu können, muss man entweder einen Verweis auf die entsprechende DLL-Datei (SCRRUN.DLL im System-Verzeichnis) setzen, oder aber mit LateBinding (sprich: CreateObject) arbeiten.

    Code:
    Sub SplitPath(ByVal sSourcePath As String, ByRef sDrive As String, _
                  ByRef sPath As String, ByRef sFilename As String, _
                  ByRef sExtension As String)
    '// ------------------------------------------------------------------------
    '// Die Variablen sDrive, sPath, sFilename und sExtension müssen ByRef
    '// übergeben werden (was standardmäßig der Fall ist, und hier nur
    '// exemplarisch dargestellt ist), damit diese als Rückgabewerte fungieren
    '// können. ByVal übergibt eine Kopie und ist somit nicht für die Rückgabe
    '// geeignet.
    '// ------------------------------------------------------------------------
    '// Variante 1 MIT Verweis auf die Microsoft Scripting Runtime.
    '// Hier ist ein Verweis auf die SCRRUN.DLL im System-Verzeichnis notwendig.
    '// ------------------------------------------------------------------------
        Dim objFso As New FileSystemObject
    '// ------------------------------------------------------------------------
    '// ODER Variante 2 OHNE Verweis auf Microsoft Scripting Runtime
    '// ------------------------------------------------------------------------
        Dim objFso As Object
        Set objFso = CreateObject("Scripting.FileSystemObject")
    '// ------------------------------------------------------------------------
        sDrive = objFso.GetDriveName(sSourcePath)
        sPath = objFso.GetParentFolderName(sSourcePath)
        sFilename = objFso.GetBaseName(sSourcePath)
        sExtension = objFso.GetExtensionName(sSourcePath)
     
    End Sub
     
    Sub Beispiel()
     
        Dim sDrive      As String
        Dim sPath       As String
        Dim sFilename   As String
        Dim sExtension  As String
        Dim sSourcePath As String
     
        sSourcePath = "C:\Programme\Microsoft Office\Office10\WINWORD.EXE"
        Call SplitPath(sSourcePath, sDrive, sPath, sFilename, sExtension)
    '// Ausgabe ----------------------------------------------------------------
        Debug.Print "Originalpfad: "; sSourcePath
        Debug.Print "Laufwerk: "; sDrive
        Debug.Print "Pfad: "; sPath
        Debug.Print "Dateiname: "; sFilename
        Debug.Print "Dateierweiterung: "; sExtension
    '// ------------------------------------------------------------------------
    '// Originalpfad: C:\Programme\Microsoft Office\Office10\WINWORD.EXE
    '// Laufwerk: C:
    '// Pfad: C:\Programme\Microsoft Office\Office10
    '// Dateiname: WINWORD
    '// Dateierweiterung: EXE
    '// ------------------------------------------------------------------------
    End Sub



    Hinweis: man muss sich für eine Variante entscheiden und den entsprechenden Teil im Beispiel deaktivieren oder löschen.

    Lösung 2: String-Manipulation mit VBA-Hausmitteln

    Unter Berücksichtigung von VBA-Version < 6 wird auf die neue Funktion InStrRev() aus VBA 6.0 in folgendem Beispiel verzichtet:

    Code:
    Sub SplitPath(ByVal sSourcePath As String, ByRef sDrive As String, _
                  ByRef sPath As String, ByRef sFilename As String, _
                  ByRef sExtension As String)
     
        Dim iOffset As Integer
    '// ------------------------------------------------------------------------
    '// Zunächst den ersten Backslash suchen
    '// ------------------------------------------------------------------------
        iOffset = InStr(sSourcePath, "\")
        If iOffset = 0 Then Exit Sub 'da ungültiger Dateipfad
    '// ------------------------------------------------------------------------
    '// Laufwerksbuchstaben ohne Backslash merken
    '// ------------------------------------------------------------------------
        sDrive = Left(sSourcePath, iOffset - 1)
    '// ------------------------------------------------------------------------
    '// Jetzt den Ordner ermitteln
    '// ------------------------------------------------------------------------
        sPath = Mid(sSourcePath, iOffset + 1)
    '// ------------------------------------------------------------------------
    '// In String für den Ordner befindet sich jetzt noch der Dateiname,
    '// also den String bis zum letzten Backslash rückwärts durchsuchen
    '// ------------------------------------------------------------------------
        For iOffset = Len(sPath) To 1 Step -1
            If Mid(sPath, iOffset, 1) = "\" Then
            '// Letzten Backslash gefunden
                sFilename = Mid(sPath, iOffset + 1)
                sPath = Left(sPath, iOffset - 1)
                Exit For
            End If
        Next
    '// ------------------------------------------------------------------------
    '// Dateiendung ermitteln; da es mehrere Punkte in einem Dateinamen
    '// geben darf, zählt hier nur der letzte.
    '// ------------------------------------------------------------------------
        If Len(sFilename) > 0 Then
        For iOffset = Len(sFilename) To 1 Step -1
            If Mid(sFilename, iOffset, 1) = "." Then
            '// Letzten Punkt gefunden
                sExtension = Mid(sFilename, iOffset + 1)
                sFilename = Left(sFilename, iOffset - 1)
                Exit For
            End If
        Next
        End If
     
    End Sub
     
    Sub Beispiel()
     
        Dim sDrive      As String
        Dim sPath       As String
        Dim sFilename   As String
        Dim sExtension  As String
        Dim sSourcePath As String
     
        sSourcePath = "C:\Programme\Microsoft Office\Office10\WINWORD.EXE"
        Call SplitPath(sSourcePath, sDrive, sPath, sFilename, sExtension)
    '// Ausgabe ----------------------------------------------------------------
        Debug.Print "Originalpfad: "; sSourcePath
        Debug.Print "Laufwerk: "; sDrive
        Debug.Print "Pfad: "; sPath
        Debug.Print "Dateiname: "; sFilename
        Debug.Print "Dateierweiterung: "; sExtension
    '// ------------------------------------------------------------------------
    '// Originalpfad: C:\Programme\Microsoft Office\Office10\WINWORD.EXE
    '// Laufwerk: C:
    '// Pfad: Programme\Microsoft Office\Office10
    '// Dateiname: WINWORD
    '// Dateierweiterung: EXE
    '// ------------------------------------------------------------------------
    End Sub



    Lösung 3: API

    Die hier vorgestellte API Lösung setzt voraus, dass auf dem System die Datei Shlwapi.dll in der Version 4.71 oder höher vorliegt. Dies in dann der Fall, wenn der Internet Explorer 4.0 oder höher installiert ist. Wie man nachfolgend sehen kann, ist der API-Weg deutlich aufwendiger:

    Code:
    Declare Function PathFindExtension Lib "shlwapi" Alias _
                    "PathFindExtensionA" _
                    (ByVal pPath As String) As Long
     
    Declare Function PathFindFileName Lib "shlwapi" Alias _
                    "PathFindFileNameA" _
                    (ByVal pPath As String) As Long
     
    Declare Function PathFindNextComponent Lib "shlwapi" Alias _
                    "PathFindNextComponentA" _
                    (ByVal pPath As String) As Long
     
    Declare Function PathStripToRoot Lib "shlwapi" Alias _
                    "PathStripToRootA" _
                    (ByVal pPath As String) As Long
     
    Declare Function lstrcpyA Lib "kernel32" _
                    (ByVal RetVal As String, _
                     ByVal Ptr As Long) As Long
     
    Declare Function lstrlenA Lib "kernel32" _
                    (ByVal Ptr As Any) As Long
     
    Sub SplitPath(ByVal sSourcePath As String, ByRef sDrive As String, _
                  ByRef sPath As String, ByRef sFilename As String, _
                  ByRef sExtension As String)
    '// ------------------------------------------------------------------------
    '// Laufwerk extrahieren
    '// ------------------------------------------------------------------------
        sDrive = sSourcePath
        Call PathStripToRoot(sDrive): sDrive = TrimNull(sDrive)
    '// ------------------------------------------------------------------------
    '// Dateiname extrahieren
    '// ------------------------------------------------------------------------
        sFilename = GetStrFromPtrA(PathFindFileName(sSourcePath))
    '// ------------------------------------------------------------------------
    '// Dateiendung extrahieren
    '// ------------------------------------------------------------------------
        sExtension = GetStrFromPtrA(PathFindExtension(sSourcePath))
    '// ------------------------------------------------------------------------
    '// Verzeichnis ermitteln
    '// ------------------------------------------------------------------------
        sPath = sSourcePath
        sPath = GetStrFromPtrA(PathFindNextComponent(sPath))
        sPath = Left(sPath, Len(sPath) - (Len(sFilename) + 1))
    '// ------------------------------------------------------------------------
    '// Dateiname ohne Extension ermitteln
    '// ------------------------------------------------------------------------
        sFilename = Left(sFilename, Len(sFilename) - Len(sExtension))
     
    End Sub
     
    Private Function TrimNull(sItem As String)
     
    '// Sucht das erste Chr(0)-Zeichen im String und gibt den
    '// String bis zu dieser Position zurück.
    '// Kommt kein Chr(0)-Zeichen vor, wird der ganze String zurückgegeben.
        Dim iPos As Integer
        iPos = InStr(sItem, Chr$(0))
        If iPos Then
              TrimNull = Left$(sItem, iPos - 1)
        Else: TrimNull = sItem
        End If
     
    End Function
     
    Function GetStrFromPtrA(ByVal lpszA As Long) As String
     
    '// Anhand der Speicheradresse einer Variablen wird
    '// deren Wert ausgelesen und als String zurückgegeben
        GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
        Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
     
    End Function
     
    Sub Beispiel()
     
        Dim sDrive      As String
        Dim sPath       As String
        Dim sFilename   As String
        Dim sExtension  As String
        Dim sSourcePath As String
     
        sSourcePath = "C:\Programme\Microsoft Office\Office10\WINWORD.EXE"
        Call SplitPath(sSourcePath, sDrive, sPath, sFilename, sExtension)
    '// Ausgabe ----------------------------------------------------------------
        Debug.Print "Originalpfad: "; sSourcePath
        Debug.Print "Laufwerk: "; sDrive
        Debug.Print "Pfad: "; sPath
        Debug.Print "Dateiname: "; sFilename
        Debug.Print "Dateierweiterung: "; sExtension
    '// ------------------------------------------------------------------------
    '// Originalpfad: C:\Programme\Microsoft Office\Office10\WINWORD.EXE
    '// Laufwerk: C:\
    '// Pfad: Programme\Microsoft Office\Office10
    '// Dateiname: WINWORD
    '// Dateierweiterung: .EXE
    '// ------------------------------------------------------------------------
    End Sub



    Neuen Tipp melden Neuen Download melden

    Copyright 2000-2003 Microsys Kramer– Alle Rechte vorbehalten - Der Download von Tipps und Programmen von den Seiten www.access-paradies.de erfolgt auf eigene Gefahr. Microsys Kramer haftet nicht für Schäden, die aus der Installation oder der Nutzung von Tipps oder Software aus dem Download-Bereich erfolgen. Trotz aktueller Virenprüfung ist eine Haftung für Schäden und Beeinträchtigungen durch Computerviren ausgeschlossen. Schadenersatzansprüche, aus welchem Rechtsgrund auch immer, sind ausgeschlossen, wenn Microsys Kramer nicht Vorsatz oder grobe Fahrlässigkeit zu vertreten hat. Dies gilt auch für Ansprüche auf Ersatz von Folgeschäden wie Datenverlust.

     
     
     
     

    Access-Paradies © 1996-2011 Microsys Kramer


    Microsoft, Access, Word, Excel, Outlook, Outlook Express, Visual Basic und Windows sind eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Weiterempfehlung  |   Linken Sie uns  |   Impressum  |   Newsletter  |   Onlineshop