Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

.BrowseForFolder

Forumthread: .BrowseForFolder

.BrowseForFolder
12.03.2006 10:56:35
ransi
Guten morgen
Habe da eine Frage:
Ich bastel grade an einer Alternative zu GetOpenFilename mit voreingestelltem
Startordner.
Ausgehend von diesem code:
Option Explicit

Sub Aufruf()
Call get_Folder("Was soll ich machen?", "C:\Eigene Dateien")
End Sub


Sub get_Folder(Optional capt, Optional initF)
'Original von K.Rola
Dim objShell As Object
Dim objFolder As Object
Dim objItem As Object
Set objShell = CreateObject("Shell.Application")
With objShell
Set objFolder = .BrowseForFolder(0&, capt, &H4000 + &H200 + &H10, initF)
End With
If Not objFolder Is Nothing Then
Set objItem = objFolder.Self
MsgBox objItem.Path
End If
End Sub

Problem:
wenn ich einen ordner auswähle gehts,
wähle ich eine datei kommt Fehlermeldung:
Automatisierungsfehler
Das System kann die angegebene Datei nicht finden.
Wo habe ich da den Denkfehler?
ransi
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: .BrowseForFolder
12.03.2006 11:33:56
Nepumuk
Hallo ransi,
das Flag &H200 gibt es nicht.
Option Explicit

Private Const BIF_BROWSEINCLUDEFILES = &H4000

Sub Aufruf()
    Call get_Folder("Was soll ich machen?", "C:\Eigene Dateien")
End Sub

Sub get_Folder(Optional capt, Optional initF)
    'Original von K.Rola
    Dim objShell As Object
    Dim objFolder As Object
    Dim objItem As Object
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(0&, capt, _
        BIF_BROWSEINCLUDEFILES, initF)
    If Not objFolder Is Nothing Then
        Set objItem = objFolder.Self
        MsgBox objItem.Path
    End If
End Sub

Alle Flags:
Private Const BIF_RETURNONLYFSDIRS = &H1
Private Const BIF_DONTGOBELOWDOMAIN = &H2
Private Const BIF_STATUSTEXT = &H4
Private Const BIF_RETURNFSANCESTORS = &H8
Private Const BIF_EDITBOX = &H10
Private Const BIF_VALIDATE = &H20
Private Const BIF_NEWDIALOGSTYLE = &H40
Private Const BIF_BROWSEINCLUDEURLS = &H80
Private Const BIF_BROWSEFORCOMPUTER = &H1000
Private Const BIF_BROWSEFORPRINTER = &H2000
Private Const BIF_BROWSEINCLUDEFILES = &H4000
Private Const BIF_SHAREABLE = &H8000

Gruß
Nepumuk

Anzeige
AW: .BrowseForFolder
ransi
Hallo Nepumuk
Die &H200 hab ich hier her:
http://ms-office-forum.net/forum/printthread.php?t=95650
Dein code gibt eine andere Fehlermeldung.
"Die Methode Browseforfolder für das object Ishelldispatch4 ist fehlgeschlagen."
Hier setzt der debugger an:
Set objFolder = objShell.BrowseForFolder(0&, capt, _
BIF_BROWSEINCLUDEFILES, initF)
Kannst du mit dem von dir geposteten code eine Datei auswählen?
ransi
Anzeige
Nachtrag
12.03.2006 11:38:36
Nepumuk
Hallo ranst,
du kannst den Dialog auch an Modal anzeigen.
Option Explicit

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

Private Const BIF_BROWSEINCLUDEFILES = &H4000

Sub Aufruf()
    Call get_Folder("Was soll ich machen?", "C:\Eigene Dateien")
End Sub

Sub get_Folder(Optional capt, Optional initF)
    'Original von K.Rola
    Dim objShell As Object
    Dim objFolder As Object
    Dim objItem As Object
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(GetActiveWindow, _
        capt, BIF_BROWSEINCLUDEFILES, initF)
    If Not objFolder Is Nothing Then
        Set objItem = objFolder.Self
        MsgBox objItem.Path
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: .BrowseForFolder
17.03.2006 00:13:33
MichaV
Hallo ransi,
vielleicht hilfts Dir ja wenn ich Dir sage, daß Dein Code bei mir funzt. Mit Dateien und Ordnern.
Gruß- Micha
AW: .BrowseForFolder
17.03.2006 00:40:40
Reinhard
Hallo Micha,
soll ransi jetzt zu Peter rübergehen um deine Version zu ermitteln *grien*
Ich glaube du hast auch 9.0.
Mit meiner 9.0 auf WinXP kommt bei beiden eine Fehlermeldung. Aber ne unterschiedliche. Also beides so Automatisierungsfehler, aber unterscheiden sich im Aufbau der Meldung.
Ui, grad nochmal was probiert, wenn ich Eigenedateien aufrufe kommt die msgbox, aber dateien in diesem Ordner negativ=Fehler
Gruß
Reinhard
Anzeige
AW: .BrowseForFolder
17.03.2006 08:26:02
MichaV
Hi Reinhardt,
er kann ja fragen ;o)
Ich hab auch XL9.0 aber im Gegensatz zu Euch auf Win2k.
Schönes Wochenende allen Beiteiligten.
Gruss- Micha
;
Anzeige

Infobox / Tutorial

Verwendung der .BrowseForFolder-Methode in VBA


Schritt-für-Schritt-Anleitung

Um die .BrowseForFolder-Methode in VBA zu verwenden, folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu starten.

  2. Füge ein neues Modul ein, indem du mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" klickst und "Einfügen" > "Modul" auswählst.

  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    
    Private Const BIF_BROWSEINCLUDEFILES = &H4000
    
    Sub Aufruf()
       Call get_Folder("Was soll ich machen?", "C:\Eigene Dateien")
    End Sub
    
    Sub get_Folder(Optional capt, Optional initF)
       Dim objShell As Object
       Dim objFolder As Object
       Dim objItem As Object
       Set objShell = CreateObject("Shell.Application")
       Set objFolder = objShell.BrowseForFolder(0, capt, BIF_BROWSEINCLUDEFILES, initF)
       If Not objFolder Is Nothing Then
           Set objItem = objFolder.Self
           MsgBox objItem.Path
       End If
    End Sub
  4. Schließe den VBA-Editor und führe das Makro Aufruf aus, um den Ordnerauswahldialog zu öffnen.


Häufige Fehler und Lösungen

Fehler: Automatisierungsfehler - Das System kann die angegebene Datei nicht finden.

  • Lösung: Stelle sicher, dass du nur Ordner auswählst und keine Dateien. Die .BrowseForFolder-Methode ist dafür gedacht, nur Ordner auszuwählen.

Fehler: Die Methode BrowseForFolder für das Objekt IshellDispatch4 ist fehlgeschlagen.

  • Lösung: Überprüfe, ob dein Code korrekt ist und dass du den richtigen Wert für initF übergibst.

Alternative Methoden

Wenn du eine Alternative zur .BrowseForFolder-Methode suchst, kannst du die FileDialog-Methode verwenden. Hier ein Beispiel:

Sub FileDialogExample()
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)

    If fd.Show = -1 Then
        MsgBox fd.SelectedItems(1)
    End If
End Sub

Diese Methode öffnet ein ähnliches Dialogfeld, das die Auswahl von Ordnern ermöglicht.


Praktische Beispiele

  1. Ordner auswählen und Pfad anzeigen:

    Sub ShowSelectedFolderPath()
       Dim folderPath As String
       folderPath = get_Folder("Wähle einen Ordner", "C:\")
       If folderPath <> "" Then
           MsgBox "Der ausgewählte Ordner ist: " & folderPath
       End If
    End Sub
  2. Verwendung mit einer Variable:

    Sub SaveFolderPathToVariable()
       Dim selectedFolder As String
       selectedFolder = get_Folder("Wähle einen Ordner", "C:\")
       If selectedFolder <> "" Then
           ' Hier kannst du den Pfad weiterverarbeiten
       End If
    End Sub

Tipps für Profis

  • Verwende die CreateObject-Methode zur Erstellung des Shell-Objekts, um sicherzustellen, dass dein Code plattformübergreifend funktioniert.
  • Nutze die verschiedenen Flags, um das Verhalten des Dialogs anzupassen, z.B. BIF_RETURNONLYFSDIRS für die Auswahl von nur Verzeichnissen.
  • Kombiniere die .BrowseForFolder-Methode mit anderen VBA-Funktionen, um benutzerdefinierte Dialoge zu erstellen.

FAQ: Häufige Fragen

1. Warum funktioniert die .BrowseForFolder-Methode nicht in meiner Excel-Version?
Es könnte sein, dass deine Excel-Version die Methode nicht unterstützt. Stelle sicher, dass du eine kompatible Version verwendest.

2. Kann ich mit .BrowseForFolder auch Dateien auswählen?
Nein, die .BrowseForFolder-Methode ist ausschließlich für die Auswahl von Ordnern vorgesehen. Für die Auswahl von Dateien solltest du Application.GetOpenFilename verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige