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

BrowseForFolder ontop

Forumthread: BrowseForFolder ontop

BrowseForFolder ontop
11.02.2017 12:26:51
Thomas
Hallo,
ich benutze folgenden Code um über einen CommandButton in einer UserForm einen Pfad auszuwählen.

Private Sub cmdOrdner_Click()           'Wahl des Pfades
Dim AppShell As Object
Dim BrowseDir As Variant
Dim j As Integer
ListBox1.Clear
Set AppShell = CreateObject("Shell.Application")
Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 0)
If BrowseDir Is Nothing Then Exit Sub
Folder = BrowseDir.Items().Item.Path
File = Dir(Folder & "\*.txt")
Do While File  ""
ListBox1.AddItem File
File = Dir
Loop
On Error Resume Next
End Sub
Dabei öffnet sich das BrowseForFolder Fenster. Da die UserForm modeless ist ist es dem Benutzer aber noch gestattet, in Excel weiter zu arbeiten. Klickt man jetzt bei geöffnetem Browserfenster irgendwo auserhalb des Fensters verschwindet dieses in den Hintergrund. Ist es möglich, dass
1. das Fenster immer im Vordergrund ist und man erst wieder etwas anderes anklicken kann wenn der Pfad gewählt wurde oder das Fenster geschlossen wird oder
2. das Fenster sich automatisch schließt, wenn man wo anders hinklickt?
Vielen Dank schonmal
Grüße,
Thomas
Anzeige

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

Betreff
Datum
Anwender
Anzeige
BrowseForFolder ontop
11.02.2017 20:00:38
Anton
Hallo Thomas,
so?:
Code:

Private Sub cmdOrdner_Click()              'Wahl des Pfades
  Dim AppShell As Object  
  Dim BrowseDir As Variant  
  Dim Folder As String, File As String  
   
  Set AppShell = CreateObject("Shell.Application")  
  With Me
    .Hide
    .ListBox1.Clear
    Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)  
    If Not BrowseDir Is Nothing Then    
      Folder = BrowseDir.items().Item.Path
      File = Dir(Folder & "\*.txt")
      Do While File <> ""  
        .ListBox1.AddItem File
        File = Dir
      Loop
    End If  
    .Show
  End With  
  Set AppShell = Nothing  
 
End Sub  


mfg Anton
Anzeige
AW: BrowseForFolder ontop
12.02.2017 17:53:59
Thomas
Hallo Anton,
Danke für die Antwort.
Leider erfüllt der Code nicht, was ich möchte. Der Code schließt ja die UserForm und zeigt nur das BrowserFenster. Klicke ich jetzt außerhalb dieses Fensters z.B. aufs Excelsheet verschwindet das BrowserFenster wieder in den Hintergrund.
Ob sich die UserForm schließt oder nicht, ist mir eigentlich egal. Ich möchte gerne, dass 1. entweder das BrowserFenster solange im Vordergrund ist bis ein Pfad ausgewählt wurde oder es geschlossen wurde oder 2. das BrowserFenster sich selber schließt wenn man wo anders hinklickt.
Der Grund ist, dass häufig ein zweites BrowserFenster geöffnet wird, da der Benutzer nicht sieht, dass eis im Hintergrund bereits offen ist. Sind jetzt allerdings zwei geöffnet funktioniert der ganze Code nicht mehr richtig.
Grüße,
Thomas
Anzeige
AW: BrowseForFolder ontop
13.02.2017 01:09:07
Jürgen
Hallo Thomas,
warum in die Ferne schweifen - nutze doch den eingebauten Dialog zur Verzeichniswahl:
Dim dlgAuswahl As FileDialog
Dim OKgedrueckt As Boolean
Dim Verzeichnis As String
Set dlgAuswahl = Application.FileDialog(msoFileDialogFolderPicker)
OKgedrueckt = dlgAuswahl.Show
If OKgedrueckt Then
Verzeichnis = dlgAuswahl.SelectedItems(1)
Gruß, Jürgen
Anzeige
AW: BrowseForFolder ontop
13.02.2017 10:43:32
Thomas
Hallo Jürgen,
Ich persönlich mag das BrowseForFolder Fenster lieber, aber so funktioniert es gut.
Vielen Dank für deine Hilfe.
;
Anzeige

Infobox / Tutorial

BrowseForFolder im Vordergrund halten


Schritt-für-Schritt-Anleitung

Um das BrowseForFolder-Fenster im Vordergrund zu halten oder es automatisch zu schließen, kannst Du den folgenden VBA-Code verwenden. Dieser Code öffnet das Fenster zur Ordnerauswahl und sorgt dafür, dass es nicht in den Hintergrund verschwindet.

Private Sub cmdOrdner_Click()           'Wahl des Pfades
    Dim AppShell As Object
    Dim BrowseDir As Variant
    Dim Folder As String, File As String
    ListBox1.Clear
    Set AppShell = CreateObject("Shell.Application")

    ' Fenster zur Ordnerauswahl im Vordergrund halten
    BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 0)

    If Not BrowseDir Is Nothing Then
        Folder = BrowseDir.Items().Item.Path
        File = Dir(Folder & "\*.txt")

        Do While File <> ""
            ListBox1.AddItem File
            File = Dir
        Loop
    End If
    Set AppShell = Nothing
End Sub

Falls Du möchtest, dass das Fenster sich schließt, wenn man woanders klickt, ist dies in VBA nicht direkt möglich. Stattdessen kannst Du das Fenster nach Auswahl eines Ordners manuell schließen.


Häufige Fehler und Lösungen

  1. Das BrowseForFolder-Fenster verschwindet in den Hintergrund

    • Lösung: Stelle sicher, dass Du den Shell.Application-Objekt korrekt verwendest und das Fenster im Vordergrund hältst, wie im obigen Beispiel gezeigt.
  2. Fehlermeldung beim Auswählen eines Ordners

    • Lösung: Überprüfe, ob der Pfad korrekt ist und ob die Berechtigungen für den Zugriff auf den Ordner vorhanden sind.

Alternative Methoden

Wenn Du eine einfachere Methode bevorzugst, kannst Du den FileDialog von Excel verwenden:

Dim dlgAuswahl As FileDialog
Dim OKgedrueckt As Boolean
Dim Verzeichnis As String
Set dlgAuswahl = Application.FileDialog(msoFileDialogFolderPicker)
OKgedrueckt = dlgAuswahl.Show
If OKgedrueckt Then
    Verzeichnis = dlgAuswahl.SelectedItems(1)
End If

Diese Methode ist möglicherweise weniger flexibel als BrowseForFolder, aber sie integriert sich besser in Excel.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die ListBox mit den Textdateien im ausgewählten Ordner füllst:

' Fülle die ListBox mit .txt-Dateien
File = Dir(Folder & "\*.txt")
Do While File <> ""
    ListBox1.AddItem File
    File = Dir
Loop

Wenn Du die Auswahl des Ordners in einer UserForm benötigst, kannst Du die oben genannten Codes kombinieren.


Tipps für Profis

  • Verwende On Error Resume Next, um Fehler im Code zu behandeln und um sicherzustellen, dass der Benutzer nicht auf unerwartete Fehlermeldungen stößt.
  • Experimentiere mit den Optionen des BrowseForFolder, um das Fenster an Deine Bedürfnisse anzupassen. Die Flags wie &H1000 oder 17 können das Verhalten verändern.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das BrowseForFolder-Fenster immer im Vordergrund bleibt?
Du kannst das Fenster mit dem Shell.Application-Objekt öffnen und sicherstellen, dass die UserForm entweder versteckt oder ebenfalls im Vordergrund bleibt.

2. Gibt es eine Möglichkeit, das BrowseForFolder-Fenster zu schließen, wenn der Benutzer woanders klickt?
Leider ist dies direkt in VBA nicht möglich. Du kannst jedoch das Fenster schließen, nachdem ein Ordner ausgewählt wurde.

3. Was ist der Vorteil der Verwendung von FileDialog?
Der FileDialog ist einfacher zu verwenden und integriert sich besser in Excel, bietet jedoch möglicherweise weniger Anpassungsmöglichkeiten als BrowseForFolder.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige