Das Archiv des Excel-Forums

API / Verzeichnis auswählen

Bild

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.
Bild


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


Bild


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.


Bild


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


Bild


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

In E97 gabs AddressOf noch nicht!

Gerd


 Bild

Excel-Beispiele zum Thema " API / Verzeichnis auswählen"

Alle Dateien im Verzeichnis öffnen download Verzeichnisbaum anlegen download
Unterverzeichnisse mit Inhalt löschen download Alle Dateien eines Verzeichnisses drucken download
Ordner eines Verzeichnisses in ListBox übernehmen download Dateinamen eines Verzeichnisses als HTML-Datei download
Feststellen, ob eine Datei in einem Verzeichnis existiert download xlSaveAs-Dialog in einem bestimmten Verzeichnis aufrufen download
Verzeichnisbaum aufrufen und Dateien in ListBox auflisten download Ordnernamen eines Verzeichnisses in Zelle einfügen download
Sicherungskopie in einem anderen Verzeichnis erstellen download Verzeichnisbaum aufrufen und Verzeichnis auswählen download
Arbeitsmappen eines Verzeichnisses ändern download Daten aus allen Dateien eines Verzeichnisses zusammenführen download
Alle Arbeitsmappen eines Verzeichnisses öffnen download Verzeichniswechsel über VBA download
Hyperlinks zu allen Excel-Dateien eines Verzeichnisses erstellen download Aus Dialog Verzeichnis auswählen, dann neuen Ordner erstellen download
Dateien in einem Verzeichnis und Unterverzeichnissen suchen download XL-Dateien aus Haupt- und Unterverzeichnissen einlesen download
Neueste Textdatei eines Verzeichnisses suchen und umbenennen download Vorkommen eines Wortes in Arbeitsmappen eines Verzeichnisse download
Ermittlung des Windows-Temp-Verzeichnisses download Ermittlung des Windows-Verzeichnisses download
Ermittlung des Windows-System-Verzeichnisses download Erste Blätter aus allen Dateien eines Verzeichnisses sammeln download
Verzeichnisse gemäß Tabelleneintragen anlegen download Vorhandensein von Verzeichnissen prüfen und Ordner anlegen download
Hierarchisch aufgebautes Inhaltsverzeichnis als HTML-File download Verzeichnisdialog mit vorgegebenem Verzeichnis aufrufen download
Unterverzeichnisse eines vorgegebenen Pfades auslesen download Anwenderverzeichnis auslesen download
Alle Textdateien eines Verzeichnisses importieren download