SHBrowseForFolder mit Default Pfad

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: SHBrowseForFolder mit Default Pfad von: Heiko S.
Geschrieben am: 01.04.2005 14:58:38

Hallo Forum,

mit untenstehendem Code öffene ich den Windows Dialog zur Auswahl eines Pfades.
Läuft auch super, aber ich möchte gerne die Auswahl mit einem Default Pfad und nicht immer von Desktop aus durchführen können.
Habe mich dazu schon ein wenig im Internet umgetan und festgestellt, das scheint nicht so einfach zu sein. Denn leider ist die pidlRoot keine Stringvariable der man mal eben so einfach einen Pfad zuweisen könnte.
Hat jemand sowas schon mal realsiert und könnte mir Tipps geben, ob und wie man das unter EXCEL VBA bewerkstelligen könnte.

Danke für alle Tipps und Anregungen,
Gruß Heiko

' Benutzerdefinierte Variable und API Funktionen zur Pfadauswahl.
Private Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

Private Declare


Function SHGetPathFromIDList Lib "shell32.dll" _
  Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare 

Function SHBrowseForFolder Lib "shell32.dll" _
  Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
  
Private Declare 

Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)

Function Pfad_auswählen(strText As String) As String
Dim bInfo       As BROWSEINFO
Dim strPath     As String
Dim lngret      As Long
Dim intpos      As Integer
With bInfo
    ' Einen Default Pfad einzurichten gestaltet sich nicht so einfach, dafür sind weitere
    ' API Aufrufe notwendig und deswegen hier erstmal nicht weiter verfolgt. So 13.03.05
    .pidlRoot = 0&
    .lpszTitle = strText
    .ulFlags = &H1
End With
lngret = SHBrowseForFolder(bInfo)
strPath = Space$(512)
lngret = SHGetPathFromIDList(ByVal lngret, ByVal strPath)
    
If lngret Then
    intpos = InStr(strPath, Chr$(0))
    Pfad_auswählen = Left(strPath, intpos - 1)
Else
    Pfad_auswählen = vbNullString
End If
' Speicher wieder frei machen.
CoTaskMemFree lngret
End Function

Bild


Betrifft: AW: SHBrowseForFolder mit Default Pfad von: K.Rola
Geschrieben am: 01.04.2005 16:13:42

Hallo,
etwas einfacher:
Option Explicit
Sub get_Folder(Optional capt, Optional initF)
Dim objShell As Object, objFolder As Object, objItem As Object
Set objShell = CreateObject("Shell.Application")
With objShell
  Set objFolder = .BrowseForFolder(0&, capt, 0, initF)
End With
If Not objFolder Is Nothing Then
  Set objItem = objFolder.Self
  MsgBox objItem.Path
End If
End Sub
Sub Aufruf()
Call get_Folder("Was soll ich machen?", "C:\Eigene Dateien")
End Sub


Gruß K.Rola

Der Fleiß ist die Wurzel aller Häßlichkeit.

Oscar Wilde




Bild


Betrifft: AW: SHBrowseForFolder mit Default Pfad von: Heiko S.
Geschrieben am: 02.04.2005 14:02:55

Hallo K.Rola,

danke für deinen Tipp, komme heute leider noch nicht dazu ihn auszutesten.
Gebe morgen Abend wenn ich ihn getestet habe noch mal ne kurze Rückmeldung.

Wünsche ein schönes sonniges Wochenende,
Gruß Heiko


Bild


Betrifft: AW: SHBrowseForFolder mit Default Pfad von: Heiko S.
Geschrieben am: 03.04.2005 21:18:04

Hallo K.Rola,

nochmal danke für den Tipp. Er hat geklappt und tut das was ich wollte.

Aber je länger man sich damit beschäftigt desto mehr Ideen kriegt man wie das eigene Makro laufen sollte, darum noch eine Frage.

Wäre es möglich mit SHBrowseForFolder oder .BrowseForFolder(0&, capt, 0, initF) das ganze so zu programmieren, das wenn man einen Defaultpfad angegeben hat im Ordnerauswahlfenster auch wieder "nach oben" springen könnte.
Also wenn z.B. C:\Copy vorgegeben ist, das man "wie im normalen Explorer" auch wieder bis zum Arbeitsplatz (um alle Laufwerke zu sehen) hoch klicken kann.

Ich hoffe mein anliegen ist verständlich.

Also nochmal danke für deinen Tipp und für eine Antwort auf meine neue Frage.


Gruß Heiko


Bild


Betrifft: AW: SHBrowseForFolder mit Default Pfad von: K.Rola
Geschrieben am: 03.04.2005 22:34:11

Hallo,

das ist mit diesem Dialog nicht möglich.

Gruß K.Rola


Bild


Betrifft: AW: SHBrowseForFolder mit Default Pfad von: Heiko S.
Geschrieben am: 04.04.2005 07:28:26

Hallo K.Rola,

danke für die Antwort. Nun weiß ich jedenfalls das es so nicht geht.


Gruß Heiko


 Bild

Beiträge aus den Excel-Beispielen zum Thema "zelle im nicht-offenen fremden workbook auslesen"