Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Pfad für "Eigene Dateien" VBA

Forumthread: Pfad für "Eigene Dateien" VBA

Pfad für "Eigene Dateien" VBA
28.08.2016 18:39:51
Henner
Guten Tag zusammen
Ich möchte den Pfad zu "Eigene Dateien" per VBA ermitteln, dies relativ zuverlässig für die gängigsten Win Versionen (bspw. XP, 9, 10). Dafür habe ich im Netz verschiedenste Lösungsansätze gefunden, diese führen bei Win10 allerdings nicht zu "Eigene Dateien" sondern zu "Eigene Dateien/Eigene Dokumente".
Folgende ("Schummel-")Lösung funktioniert bei mir nun sehr zuverlässig, ich frage mich aber ob es auch einfacher und vor allem eleganter geht:

Sub EigeneDateien()
Set WshShell = CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
strMyData = Left(strDesktop, Len(strDesktop) - 7)
MsgBox strMyData
Set WshShell = Nothing
End Sub

Lösung 1 aus dem Netz: (Pfad entspricht "Eigene Dokumente")
(Autor unbekannt)

Sub EigeneDateien()
Set WshShell = CreateObject("WScript.Shell")
strMyDocuments = WshShell.SpecialFolders("MyDocuments")
MsgBox strMyDocuments
Set WshShell = Nothing
End Sub

Lösung 2 aus dem Netz: (Pfad entspricht auch "Eigene Dokumente")
(Autor: Nepumuk)

Sub EigeneDateien()
' Modul: Modul1 Typ: Allgemeines Modul
Option Explicit
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" ( _
ByVal pidl As Long, _
ByVal pszPath As String) As Long
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" ( _
ByVal hwndOwner As Long, _
ByVal nFolder As Long, _
pidl As ITEMIDLIST) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Type ITEMID
cb As Long
abID As Byte
End Type
Private Type ITEMIDLIST
mkid As ITEMID
End Type
Private Enum Foldertype
V_DESKTOP = &H0
R_PROGRAMME = &H2
V_SYSTEMSTEUERUNG = &H3
V_DRUCKER = &H4
R_EIGENE_DATEIEN = &H5
R_FAVORITEN = &H6
R_AUTOSTART = &H7
R_DOKUMENTE = &H8
R_SENDEN_AN = &H9
V_PAPIERKORB = &HA
R_STARTMENÜ = &HB
R_DESKTOP = &H10
V_ARBEITSPLATZ = &H11
V_NETZWERKUMGEBUNG = &H12
R_NETZWERKUMGEBUNG = &H13
R_FONTS = &H14
R_NEW_SHELL = &H15
R_TEMP_INTERNET = &H20
End Enum
Private Const NOERROR = 0
Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"
Private Function GetPath(enum_Folder As Foldertype) As String
Dim lngResult As Long, strBuffer As String
Dim udtIDL As ITEMIDLIST
lngResult = SHGetSpecialFolderLocation(FindWindow _
(GC_CLASSNAMEMSEXCEL, vbNullString), enum_Folder, udtIDL)
If lngResult = NOERROR Then
strBuffer = Space$(512)
lngResult = SHGetPathFromIDList(ByVal udtIDL.mkid.cb, ByVal strBuffer)
If lngResult Then GetPath = Trim$(strBuffer)
End If
End Function
Public Sub test()
Dim strPath As String
strPath = GetPath(R_EIGENE_DATEIEN)
If Trim$(strPath)  "" Then
strPath = Left$(strPath, Len(strPath) - 1)
MsgBox strPath
End If
End Sub

Für konstruktive Vorschläge bedanke ich mich im Voraus, ansonsten habe ich ja eine funktionierende Lösung.
Schönen Sonntag Abend & Gruss, Henner
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 19:08:14
Hajo_Zi
Hallo Henner,
MsgBox Application.DefaultFilePath

AW: Pfad für "Eigene Dateien" VBA
28.08.2016 19:48:29
Henner
Hallo Hajo,
vielen Dank für Deine Antwort. Dein Vorschlag führt jedoch leider auch zu "Eigene Dateien/Eigene Dokumente".
Gruss Henner
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 19:50:49
Hajo_Zi
Hallo Henner,
dann hat Dein Ordner den Namen.
Bei mir wird W:\Eigene Dateien angezeigt.
Gruß Hajo
Anzeige
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 19:59:59
Henner
Guten Abend Hajo,
das ist interessant. Bei mir gibt es im Ordner "Eigene Dateien" nochmals einen Unterordner "Eigene Dokumente", der wurde aber von WIN so angelegt. Lege ich nun eine Datei mit Deiner Methode ab, wird sie im Unterordner "Eigene Dokumente" gespeichert - und genau das möchte ich ja nicht.
Zur Info: Die Varianten von User "Planlos" funktionieren bei mir einwandfrei und greifen auf "Eigene Dateien" - ohne Unterordner - zu. Eventuell lässt sich der Default Ordner von Excel irgendwo definieren oder ändern, dann würde Deine Methode evtl. auch funktionieren. Ich habe jedoch nicht immer Zugriff auf die PCs wo es funktionieren soll, daher brauche ich eine zuverlässige andere Lösung.
Trotzdem vielen Dank für Deine Hilfe. Schönen Abend, Gruss Henner
Anzeige
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 20:02:52
Hajo_Zi
Hallo Henner,
Windows Explorer, Dokumente, Eigenschaften, Pfad. Was wird da angezeigt.
Gruß Hajo
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 20:09:15
Henner
Hallo Hajo
Gemäss Deiner Anleitung:

C:\Users\Max Mustermann\Documents
Ziel soll aber sein:

C:\Users\Max Mustermann

Gruss Henner
Anzeige
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 20:11:45
Hajo_Zi
Hallo Henner,
Du möchtest also keinen Unterordner mehr haben unter Max Mustermann. Ich würde sowas ja ablehnen.
Warum änderst Du den Pfad dann nicht?
Gruß Hajo
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 20:20:33
Henner
Hallo Hajo
Doch ich möchte noch Unterordner in "Eigene Dateien" haben, da bleibt alles wie es ist. Zudem ist das auch auf jedem PC anders. Der per VBA ermittelte Pfad soll aber NICHT in einem Unterordern sein damit es kompatibel bleibt.
Schaue Dir die Lösung von "Planlos" an, das ist genau das was ich benötige. Gruss Henner
Anzeige
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 19:18:30
Planlos
Hallo
wenn et lüpt dann lüpt et, also warum ändern. Und der eigene Code ist erstmal immer am elegantesten. ;-)
Aba jut hier noch 2 Vorschläge:
1. "Environ$("USERPROFILE")
2. Im Code von Nepumuk die Zeile "strPath = GetPath(R_EIGENE_DATEIEN)" durch "strPath = GetPath(40)" ersetzen.
Anzeige
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 19:53:58
Henner
Hallo Unbekannter,
so planlos scheinst Du ja gar nicht zu sein ;-) Beide Deiner Varianten funktionieren einwandfrei. Kannst Du eine Aussage dazu machen wie zuverlässig sie bei anderen WIN Versionen funktionieren?
Besten Dank und Gruss, Henner
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 20:37:45
Planlos
Hallo
der wert 40 (CSIDL_PROFILE) sollte lt. https://msdn.microsoft.com/en-us/library/windows/desktop/bb762494(v=vs.85).aspx ab xp laufen.
Bei der eviron - variante kann ich nix genaues sagen, 7 und 10 funktionieren jedenfalls, aber sie ist u.U nicht safe wenn der user z.b. Excel mittels Batch startet und dort den Path selbst setzt (set userprofile=Z:\kaputt). Ist dies der Fall dann funktioniert deine Methode 1 aber auch nicht mehr zuverlässig.
Anzeige
AW: Pfad für "Eigene Dateien" VBA
28.08.2016 20:46:14
Henner
Hallo,
ich nehme die Wert 40 Variante. Macht auf mich einen soliden Eindruck und ist schmaler als meine Bastelei. Vielen Dank und Gruss, Henner
AW: Pfad für "Eigene Dateien" VBA
29.08.2016 00:10:47
snb

Sub M_snb()
MsgBox CreateObject("wscript.shell").SpecialFolders(16)
' oder
MsgBox CreateObject("wscript.shell").SpecialFolders("MyDocuments")
End Sub

Anzeige
;
Anzeige

Infobox / Tutorial

Pfad für "Eigene Dateien" per VBA ermitteln


Schritt-für-Schritt-Anleitung

Um den Pfad zu "Eigene Dateien" per VBA zu ermitteln, kannst Du folgende Schritte befolgen:

  1. Öffne Excel und gehe zu den Entwicklertools (falls diese nicht sichtbar sind, aktiviere sie in den Excel-Optionen).

  2. Erstelle ein neues Modul:

    • Klicke auf "Einfügen" und wähle "Modul".
  3. Füge den folgenden Code ein:

    Sub EigeneDateien()
       Set WshShell = CreateObject("WScript.Shell")
       strMyDocuments = WshShell.SpecialFolders("MyDocuments")
       MsgBox strMyDocuments
       Set WshShell = Nothing
    End Sub
  4. Starte das Makro mit F5 oder über das Menü "Ausführen".

  5. Überprüfe das Ergebnis in der angezeigten MessageBox.

Mit diesem Code findest Du den Pfad zu Deinen "eigenen Dateien" in Windows 10, ohne dass Du in den Unterordner "Eigene Dokumente" gelangst.


Häufige Fehler und Lösungen

  • Fehler: Der Pfad zeigt auf "Eigene Dokumente".

    • Lösung: Stelle sicher, dass Du WshShell.SpecialFolders("MyDocuments") verwendest. Um direkt auf "Eigene Dateien" zuzugreifen, benutze die Methode von User "Planlos".
  • Fehler: Der Code funktioniert nicht auf Windows 10.

    • Lösung: Überprüfe, ob die Windows-Umgebungsvariablen korrekt gesetzt sind. Der Code sollte mit WshShell.SpecialFolders funktionieren.

Alternative Methoden

Es gibt verschiedene Ansätze, um den Pfad zu "Eigene Dateien" zu ermitteln:

  1. Verwendung von Environ:

    MsgBox Environ("USERPROFILE")

    Dieser Code gibt den Pfad zu Deinem Benutzerprofil zurück, welcher in der Regel auf "Eigenen Dateien" verweist.

  2. Direkte Verwendung von CSIDL:

    Private Const CSIDL_PERSONAL As Long = &H5

    Ersetze die Zeile in einem der vorherigen Codes durch den CSIDL-Wert, um auf "Eigene Dateien" zuzugreifen.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du den Pfad zu "Eigene Dateien" ermitteln kannst:

  1. Mit CSIDL:

    Sub GetEigeneDateien()
       Dim strPath As String
       strPath = GetPath(CSIDL_PERSONAL)
       MsgBox strPath
    End Sub
  2. Mit WshShell:

    Sub GetEigeneDateienWsh()
       MsgBox CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
    End Sub

Beide Methoden zeigen Dir den Pfad zu Deinen "eigenen Dateien".


Tipps für Profis

  • Einstellungen anpassen: Du kannst den Standardordner für Datei-Downloads in Excel ändern, um den Zugriff auf "eigene Dateien" zu erleichtern.
  • Verwende Fehlerbehandlung: Implementiere On Error Resume Next, um unerwartete Fehler beim Zugriff auf den Pfad abzufangen.
  • Testen auf verschiedenen Windows-Versionen: Wenn Du den Code auf mehreren Windows-Versionen verwenden möchtest, teste ihn zuerst auf den Zielsystemen.

FAQ: Häufige Fragen

1. Wie kann ich den Pfad zu "Eigene Dateien" auf Windows 10 ändern?
Du kannst den Speicherort für "Eigene Dateien" über die Eigenschaften des Ordners im Windows Explorer ändern.

2. Warum zeigt mein Code immer "Eigene Dokumente" an?
Wenn Dein Code auf "Eigene Dokumente" zeigt, überprüfe, ob Du die richtige Methode verwendest, um auf den gewünschten Ordner zuzugreifen. Benutze WshShell.SpecialFolders("MyDocuments") für diesen Fall.

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