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

API / Verzeichnis auswählen

API / Verzeichnis auswählen
05.10.2003 18:02:26
Hans T.
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.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: API / Verzeichnis auswählen
05.10.2003 18:39:28
GraFri
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
Anzeige
AW: API / Verzeichnis auswählen
05.10.2003 19:53:30
Hans T.
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.
AW: API / Verzeichnis auswählen
05.10.2003 20:25:11
GraFri
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
Anzeige
AW: API / Verzeichnis auswählen
06.10.2003 00:06:34
GerdW
In E97 gabs AddressOf noch nicht!

Gerd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige