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

Dateipfad vom User abfragen

Forumthread: Dateipfad vom User abfragen

Dateipfad vom User abfragen
kle
Hallo,
gibt es eine Befehl, um einen Dateipfad von einem User abzufragen ?
Ich würde gern, dass der User einen Zielpfad auswählt...mehr nicht.
D.h. ich suche eine Dialog-Form, in der der User wie bei dem Dialog Öffnen z.B. den Pfad auswählt.
Ich will aber eben keine Datei speichern - sondern nur den Pfad wissen...zu einem Ordner !
Gruß und Danke
Kay
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Dateipfad vom User abfragen
18.03.2011 09:00:39
JoWE
Hallo Kay,
so evtl.:
Sub getPath()
Dim sPfad As String
ChDrive "C"
ChDir "C:\Daten"
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte wählen Sie einen gültigen Pfad aus"
If .Show = -1 Then sPfad = .SelectedItems(1)
End With
If sPfad  "" Then
MsgBox sPfad
Else
Exit Sub
End If
Set fs = Nothing
End Sub

Gruß
Jochen
Anzeige
Set fs = Nothing muß aber wieder raus ;o) oT
18.03.2011 09:08:58
Matthias
AW: Dateipfad vom User abfragen
18.03.2011 09:04:41
haw
Hallo Kay,
irgendwo aus dem Netz:
Public Sub Ordner_Auswahl()
Dim strVerzeichnis As String
Dim strOrdner As String
strOrdner = "C:\temp\"
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = strOrdner
.Title = "Ordnerauswahl"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewList
If .Show = -1 Then
strVerzeichnis = .SelectedItems(1)
If Right(strVerzeichnis, 1)  "\" Then strVerzeichnis = strVerzeichnis & "\"
Else
MsgBox "Es wurde kein Ordner ausgewaehlt!"
Exit Sub
End If
End With
MsgBox strVerzeichnis
End Sub
Gruß
Heinz
Anzeige
AW: oder So
18.03.2011 09:08:27
Ralf_P
Public sPath As String
Public PROJEKT As String
Private Declare Function SHBrowseForFolder Lib "shell32" _
(lpbi As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" _
(ByVal pidList As Long, ByVal lpBuffer As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function SHSimpleIDListFromPath Lib "shell32" Alias "#162" _
(ByVal szPath As String) As Long
Private Const BIF_RETURNONLYFSDIRS As Long = 1
Private Const BIF_DONTGOBELOWDOMAIN As Long = 2
Private Const BFFM_INITIALIZED As Long = 1
Private Const MAX_PATH As Long = 260
Private Const WM_USER As Long = &H400
Private Const BFFM_SETSTATUSTEXTA As Long = (WM_USER + 100)
Private Const BFFM_SETSELECTIONA As Long = (WM_USER + 102)
Private Const BFFM_SETSELECTIONW As Long = (WM_USER + 103)
Private Const BFFM_SETSTATUSTEXTW As Long = (WM_USER + 104)
Private Type BROWSEINFO
hwndOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
' Callback für die Browse-Directory-Methode - "pidList"-Methode
' zur Verwendung in der BrowseDirectory()-Funktion
Private Function BrowseCallBackProc(ByVal hWnd As Long, _
ByVal uMsg As Long, ByVal lParam As Long, _
ByVal lpData As Long) As Long
'Voreinstellung des Verzeichnisses im Verzeichnis-
'Dialog unter Verwendung des Parameters "pidList"
Select Case uMsg
Case BFFM_INITIALIZED
Call SendMessage(hWnd, BFFM_SETSELECTIONA, False, ByVal lpData)
Case Else
End Select
End Function
Private Function FARPROC(pfn As Long) As Long
FARPROC = pfn
End Function

Private Function GetPIDLFromPath(ByVal sPath As String) As Long
GetPIDLFromPath = SHSimpleIDListFromPath(StrConv(sPath, vbUnicode))
End Function

Public Function BrowseDirectory(Optional ByVal strInitialDir As String, Optional ByVal _
hWnd As Long) As String
Dim lpIDList As Long
Dim sBuffer As String
Dim szTitle As String
Dim tBrowseInfo As BROWSEINFO
szTitle = "Bitte wählen Sie das Verzeichnis!"
With tBrowseInfo
.hwndOwner = hWnd
.pidlRoot = 0
.lpszTitle = szTitle
.lpfnCallback = FARPROC(AddressOf BrowseCallBackProc)
.lParam = GetPIDLFromPath(strInitialDir)
End With
lpIDList = SHBrowseForFolder(tBrowseInfo)
If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
BrowseDirectory = sBuffer
CoTaskMemFree lpIDList
Else
BrowseDirectory = strInitialDir
End If
' Ressourcen freigeben
CoTaskMemFree tBrowseInfo.lParam
End Function
Sub browser()
Dim strInitialDir As String, strPath As String
Dim sFile As String, sPattern As String
sPath = BrowseDirectory()
If sPath = "" Then Exit Sub
' PROJEKT = Right(sPath, Len(sPath) - InStrRev(sPath, "\"))
' UserForm1.Label2.Caption = PROJEKT
'einlesen
' If Right(sPath, 1) "\" Then sPath = sPath & "\"
' sPattern = "*.*"
MsgBox sPath
End Sub Alles in ein Modul kopieren und "Sub browser" ausführen.
VG, Ralf
Anzeige
SUper vielen Dank für all die Beispiele...
18.03.2011 14:25:11
kle
Habe das von Jochen genutzt...werde aber auch mir die anderen anschauen und testen ;o)
Gruß und vielen Dank Euch allen - es ist eben hier doch das beste Forum was ich kenne ;o)))
Kay
PS: Sollte es mal ein Treffen geben, dann sagt mir Bescheid - dann komm ich und bring 'n Kasten Bier mit !!!
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Dateipfad vom User abfragen in Excel VBA


Schritt-für-Schritt-Anleitung

Um einen Dateipfad von einem User abzufragen, kannst du die FileDialog-Funktion in Excel VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

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

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste im Projektfenster auf VBAProject (DeinDateiname) und wähle Einfügen > Modul.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub getPath()
       Dim sPfad As String
       ChDrive "C"
       ChDir "C:\Daten"
       With Application.FileDialog(msoFileDialogFolderPicker)
           .Title = "Bitte wählen Sie einen gültigen Pfad aus"
           If .Show = -1 Then sPfad = .SelectedItems(1)
       End With
       If sPfad <> "" Then
           MsgBox sPfad
       Else
           Exit Sub
       End If
    End Sub
  4. Schließe den VBA-Editor und gehe zurück nach Excel.

  5. Führe das Makro aus, indem du ALT + F8 drückst, das Makro getPath auswählst und auf Ausführen klickst.

Mit diesem Code kannst du den Speicherort abfragen, ohne eine Datei zu speichern.


Häufige Fehler und Lösungen

  • Fehler: "power bi kein gültiger dateipfad"

    • Dieser Fehler tritt auf, wenn der angegebene Pfad nicht korrekt ist. Stelle sicher, dass der Benutzer einen gültigen Ordner auswählt und der Pfad existiert.
  • Fehler: MsgBox zeigt leere Meldung

    • Überprüfe, ob der Benutzer tatsächlich einen Ordner ausgewählt hat. Wenn die Rückgabe des Dialogs leer ist, wird die Meldung nicht angezeigt.

Alternative Methoden

Wenn du eine andere Methode bevorzugst, um einen Ordner auszuwählen, kannst du den folgenden Code verwenden, der eine erweiterte Funktionalität bietet:

Public Function BrowseDirectory(Optional ByVal strInitialDir As String) As String
    Dim lpIDList As Long
    Dim sBuffer As String
    Dim szTitle As String
    Dim tBrowseInfo As BROWSEINFO
    szTitle = "Bitte wählen Sie das Verzeichnis!"
    With tBrowseInfo
        .hwndOwner = Application.hWnd
        .pidlRoot = 0
        .lpszTitle = szTitle
        .lParam = GetPIDLFromPath(strInitialDir)
    End With
    lpIDList = SHBrowseForFolder(tBrowseInfo)
    If (lpIDList) Then
        sBuffer = Space(MAX_PATH)
        SHGetPathFromIDList lpIDList, sBuffer
        BrowseDirectory = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
    Else
        BrowseDirectory = strInitialDir
    End If
End Function

Du kannst diese Funktion aufrufen, um eine Benutzeroberfläche zur Auswahl eines Ordners anzuzeigen.


Praktische Beispiele

Hier sind zwei Beispiele, die du direkt in dein Projekt einfügen kannst:

  1. Einfacher Ordnerauswahl-Dialog:

    Sub Ordner_Auswahl()
       Dim strVerzeichnis As String
       With Application.FileDialog(msoFileDialogFolderPicker)
           If .Show = -1 Then
               strVerzeichnis = .SelectedItems(1)
               MsgBox strVerzeichnis
           Else
               MsgBox "Es wurde kein Ordner ausgewählt!"
           End If
       End With
    End Sub
  2. Erweiterte Auswahl mit vordefiniertem Pfad:

    Sub BrowserMitStartPfad()
       Dim strPath As String
       strPath = BrowseDirectory("C:\temp\")
       MsgBox strPath
    End Sub

Tipps für Profis

  • Verwende Kommentare in deinem Code, um die Funktionalität zu erklären, insbesondere wenn du komplexere Dialoge nutzt.
  • Teste deine VBA-Makros in einer Kopie deiner Datei, um unerwartete Änderungen zu vermeiden.
  • Achte darauf, den richtigen Datentyp für Variablen zu verwenden, um Fehler zu minimieren.

FAQ: Häufige Fragen

1. Wie kann ich den Dateipfad in einer Zelle speichern? Um den ausgewählten Pfad in einer Zelle zu speichern, kannst du den folgenden Code verwenden:

Range("A1").Value = sPfad

2. Funktioniert das auch in Power BI? In Power BI gibt es keine direkte Möglichkeit, einen Dateipfad über VBA abzufragen. Du musst sicherstellen, dass die Quelldaten korrekt verknüpft sind, um den Fehler "power bi kein gültiger dateipfad" zu vermeiden.

3. Kann ich den Dialog anpassen? Ja, du kannst die Eigenschaften des FileDialog-Objekts anpassen, um z.B. den Titel oder die Anfangsposition festzulegen.

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