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 Image
BildScreenshot zu Image Image-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

API / Verzeichnis auswählen

    Betrifft: API / Verzeichnis auswählen von: Hans T.
    Geschrieben am: 05.10.2003 18:02:26

    Hallo SpezialistInnen

    Ich rufe über das Windows-API den Dialog "Ordner suchen" auf, ähnlich dem FAQ-Beitrag 082799. Nun stört mich aber, dass ich immer zuunterst im Verzeichnisbaum anfangen muss. Kennt jemand einen Weg, einen Pfad als Parameter mitzugeben, damit der Dialog gleich dieses Verzeichnis anzeigt? Ich möchte aber immer noch im gesamten Verzeichnisbaum herumnavigieren können.

    Danke für Hinweise.

    Viele Grüsse
    Hans T.

      


    Betrifft: AW: API / Verzeichnis auswählen von: GraFri
    Geschrieben am: 05.10.2003 18:39:28

    Hallo



    '————————————————————————————————
    '   05/10/2003
    '©  Ing.Friedrich Grath
    '@  grath.fritz@ aon.at
    '————————————————————————————————

    Option Explicit

    ' Benötigte API-Deklarationen
    Private Type BrowseInfo
      hWndOwner As Long
      pIDLRoot As Long
      pszDisplayName As Long
      lpszTitle As Long
      ulFlags As Long
      lpfnCallback As Long
      lParam As Long
      iImage As Long
    End Type

    Private Const MAX_PATH = 260
    Private Const BIF_RETURNONLYFSDIRS = &H1
    Private Const BFFM_SETSELECTION = &H466
    Private Const BFFM_INITIALIZED = 1

    Private Declare Sub CoTaskMemFree Lib "ole32.dll" _
      (ByVal hMem As Long)

    Private Declare Function lstrcat Lib "kernel32" Alias _
      "lstrcatA" (ByVal lpString1 As String, _
      ByVal lpString2 As StringAs Long

    Private Declare Function GetActiveWindow Lib "user32" () As Long

    Private Declare Function SHGetPathFromIDList Lib "shell32" ( _
      ByVal pidList As Long, _
      ByVal lpBuffer As StringAs Long

    Private Declare Function SHBrowseForFolder Lib "shell32" ( _
      lpbi As BrowseInfo) As 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 m_BrowseInitDir As String

    'Soll im Ordnerauswahl-Dialog z.B. das Anwendungsverzeichnis Ihres
    'Programms vorselektiert werden, rufen Sie die BrowseForFolder-Funktion
    'wie folgt auf:
    Sub Dialog_aufrufen()
    Dim sPath As String

    sPath = BrowseForFolder("Bitte Ordner auswählen""C:\temp")
    If sPath <> "" Then
      MsgBox sPath
    End If

    End Sub

    ' Ordnerauswahl-Dialog mit optionaler
    ' Angabe eines Startverzeichnisses
    Public Function BrowseForFolder(ByVal sPrompt As String, _
      Optional ByVal sInitDir As StringAs String
      
      Dim nPos As Long
      Dim nIDList As Long
      Dim sPath As String
      Dim oInfo As BrowseInfo
      
      m_BrowseInitDir = sInitDir

      ' Datenstruktur füllen
      With oInfo
        .hWndOwner = GetActiveWindow()
        .lpszTitle = lstrcat(sPrompt, "")
        .ulFlags = BIF_RETURNONLYFSDIRS
        If sInitDir <> "" Then
          ' Callback-Funktionsadresse
          .lpfnCallback = FuncCallback(AddressOf BrowseCallback)
        End If
      End With

      ' Dialog anzeigen und auswerten
      nIDList = SHBrowseForFolder(oInfo)
      If nIDList Then
        sPath = String$(MAX_PATH, 0)
        Call SHGetPathFromIDList(nIDList, sPath)
        Call CoTaskMemFree(nIDList)
        nPos = InStr(sPath, vbNullChar)
        If nPos Then sPath = Left$(sPath, nPos - 1)
      End If

      BrowseForFolder = sPath
    End Function
    Private Function BrowseCallback(ByVal hWnd As Long, _
      ByVal uMsg As Long, _
      ByVal wParam As Long, _
      ByVal lParam As LongAs Long
     
      Select Case uMsg
        Case BFFM_INITIALIZED
          ' Start-Ordner
          Call SendMessage(hWnd, BFFM_SETSELECTION, ByVal 1&, _
            ByVal m_BrowseInitDir)
      End Select
      BrowseCallback = 0
    End Function
    ' Hilfsfunktion für AddressOf
    Private Function FuncCallback(ByVal nParam As LongAs Long
      FuncCallback = nParam
    End Function


         Code eingefügt mit Syntaxhighlighter 2.4


    mfg, GraFri


      


    Betrifft: AW: API / Verzeichnis auswählen von: Hans T.
    Geschrieben am: 05.10.2003 19:53:30

    Hallo Fritz

    Sorry für die späte Antwort. Danke für den interessanten Code. Leider stelle ich einen Syntaxfehler fest in der Zeile .lpfnCallback = FuncCallback(AddressOf BrowseCallback) in der Funktion BrowseForFolder.
    Offensichtlich ist in meiner VBA-Version das Schlüsselwort "AddressOf" nicht bekannt. Wie lässt sich dieses Problem umgehen?

    Für entsprechende Nachhilfe wäre ich froh.

    Viele Grüsse
    Hans T.


      


    Betrifft: AW: API / Verzeichnis auswählen von: GraFri
    Geschrieben am: 05.10.2003 20:25:11

    Hallo

    Habe leider bei mir zu Hause kein 8.0 - Office 97. Werde versuchen, den Fehler in der Firma zu finden. Dürfte warscheinlich eine andere API-Dekleration sein.

    Falls ich eine Lösung finde, melde ich mich nochmals.

    Einen schönen Abend

    mfg, GraFri


      


    Betrifft: AW: API / Verzeichnis auswählen von: GerdW
    Geschrieben am: 06.10.2003 00:06:34

    In E97 gabs AddressOf noch nicht!

    Gerd


     

    Beiträge aus den Excel-Beispielen zum Thema " API / Verzeichnis auswählen"