Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
708to712
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
708to712
708to712
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Verzeichnis wechseln

Verzeichnis wechseln
14.12.2005 11:44:37
Christian
Ich baue gerade an einem Makro das in gewissen Ordnern Wertetabellen findet und auswertet.
Bis Jetzt musste eine Feste Ordnerstruktur gegeben sein das das Makro Funktioniert... Laufwerk:\Probe\Probennummer...
Ich würde gern das Makro von den eingaben dieser Daten befreien!
deshalb lautet meine Frage:
gibt es mit VBA eine möglichkeit einen ordner "interaktiv" auszuwählen...
wie bei dem auswählen eines Installationsverzeichnisses oder bei "extract to" beim Winrar.
ich hoffe ihr versteht mich...
Danke
Christian

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verzeichnis wechseln
14.12.2005 12:57:30
P@ulchen
Hallo Christian,
folgenden Code in ein Modul:


Option Explicit
Private Declare Function SHBrowseForFolder Lib "shell32" ( _
    lpbi As InfoT) As Long
Private Declare Function CoTaskMemFree Lib "ole32" ( _
    ByVal hMem As LongAs Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" ( _
    ByVal lpStr1 As String, _
    ByVal lpStr2 As StringAs Long
Private Declare Function SHGetPathFromIDList Lib "shell32" ( _
    ByVal pList As Long, _
    ByVal lpBuffer As StringAs Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassname As String, _
    ByVal lpWindowName As StringAs Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
    ByVal hWnd As Long, _
    ByVal Msg As Long, _
    wParam As Any, _
    lParam As Any) As Long
  
Private Type InfoT
    hWnd As Long
    Root As Long
    DisplayName As Long
    Title As Long
    Flags As Long
    FName As Long
    lParam As Long
    Image As Long
End Type
Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
Private Const BIF_RETURNFSANCESTORS As Long = &H8
Private Const BIF_RETURNONLYFSDIRSCREATENEW As Long = &H40
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
Private Const BIF_BROWSEFORPRINTER As Long = &H2000
Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
Private Const BFFM_SETSELECTION = &H466
Private Const BFFM_INITIALIZED = &H1
Private s_BrowseInitDir As String
Private Function fncGetFolder( _
    Optional ByVal sMsg As String "Bitte wählen Sie ein Verzeichnis", _
    Optional ByVal lFlag As Long = BIF_RETURNONLYFSDIRS, _
    Optional ByVal sPath As String "C:\"As String
    Dim xl As InfoT, IDList As Long, RVal As Long, FolderName As String
    s_BrowseInitDir = sPath
    With xl
        .hWnd = FindWindow("XLMAIN", vbNullString)
        .Root = 0
        .Title = lstrcat(sMsg, "")
        .Flags = lFlag
        .FName = FuncCallback(AddressOf BrowseCallback)
    End With
    IDList = SHBrowseForFolder(xl)
    If IDList <> 0 Then
        FolderName = Space(256)
        RVal = SHGetPathFromIDList(IDList, FolderName)
        CoTaskMemFree (IDList)
        FolderName = Trim$(FolderName)
        FolderName = Left$(FolderName, Len(FolderName) - 1)
    End If
    fncGetFolder = FolderName
End Function
Private Function BrowseCallback( _
    ByVal hWnd As Long, _
    ByVal uMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As LongAs Long
    If uMsg = BFFM_INITIALIZED Then _
        Call SendMessage(hWnd, BFFM_SETSELECTION, ByVal 1&, ByVal s_BrowseInitDir)
    BrowseCallback = 0
End Function
Private Function FuncCallback(ByVal nParam As LongAs Long
    FuncCallback = nParam
End Function
Public Sub test()
    Dim sFolder As String
    sFolder = Trim$(fncGetFolder(, , "C:\Temp"))
    If sFolder <> "" Then MsgBox sFolder
End Sub


Dann aus Deinem Makro heraus die Sub "test" aufrufen. In dieser Sub kannst Du auch Ordner voreinstellen (hier C:\Temp).
Mit der Variablen sFolder kannst Du dann in Deinem Makro weiterarbeiten.
Gruß aus Leipzig
P@ulchen
Anzeige
AW: Verzeichnis wechseln
14.12.2005 19:38:47
christian
danke! funktioniert richtig gut!!!!
gruß aus zwickau
christian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige