Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Pfadauswahl mit ÖffnenDialog





Frage

Hallo in die Runde... ich möchte zum abspeichern kleiner Dateien aus Excel heraus eine Pfadauswahl haben. Bislang mache ich das mit selbstgestrickten Listen- und Kombi-Feldern. Das Funktioniert zwar, sieht aber aus wie gewollt und nicht gekonnt! Meine Frage: Kann man aus dem ÖffenDialog den Pfad 'auslesen', ohne eine Datei auswählen zu müssen? In der Hilfe habe ich nichts gefunden. Ich hoffe, ich habe mich verständlich ausgedrückt.... ansonsten: bitte nachfragen. Desten Dank im Voraus Gruss Andreas

Antwort 1 von nighty

hi all :-)

von einem anderen netten user erstellt .-)
grundkenntnisse vorrausgesetzt !!!

gruss nighty

EINLESEN ist das zu startende makro

ORDNERNAME die übergabevariable

Option Explicit
Private Type BrowseInfo
hwndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
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 Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Dim Verzeichnisse()
Dim Dateien()
Dim Anzdateien As Long
Sub Einlesen()
Dim Ordnername
Dim Pfad1 As String
Dim Obergrenze As Long
Dim Anzordner As Long
Dim i As Long
Const cVerzeichnistiefe = 5
Dim intVerzeichnistiefe As Integer
Dim Start As Long
Ordnername = Ordnerwählen("Ab welchem Verzeichnis einlesen?")
If Ordnername = False Then Exit Sub
ChDir Ordnername
ChDir ".."
If Ordnername <> "" Then
Anzdateien = 0
intVerzeichnistiefe = 0
Pfad1 = Ordnername
If Right(Ordnername, 1) <> "\" Then Pfad1 = Pfad1 & "\"
ReDim Verzeichnisse(0)
Verzeichnisse(0) = Pfad1
Obergrenze = UBound(Verzeichnisse)
ReDim Dateien(0)

Rekursion:
For i = Start To Obergrenze
Verzeichnisse_suchen Verzeichnisse(i), Obergrenze
intVerzeichnistiefe = intVerzeichnistiefe + 1
Start = Start + 1
Obergrenze = UBound(Verzeichnisse)
If intVerzeichnistiefe < cVerzeichnistiefe Then GoTo Rekursion
intVerzeichnistiefe = intVerzeichnistiefe - 1
Next
Anzordner = Obergrenze + 1
If Anzordner = 0 Then
MsgBox "Es gibt nichts zu tun!", vbInformation + vbOKOnly, "Keine Ordner"
Else
For i = 0 To Anzordner - 1
Cells(i + 1, 1).Value = Verzeichnisse(i)
Next
End If
End If
End Sub

Private Sub Verzeichnisse_suchen(ByVal Pfad As String, ByVal Arraygrenze As Long)
Dim Name1 As String
Name1 = Dir(Pfad, vbDirectory)
Do While Name1 <> ""
If Name1 <> "." And Name1 <> ".." Then
If (GetAttr(Pfad & Name1) And vbDirectory) = vbDirectory Then
Arraygrenze = Arraygrenze + 1
ReDim Preserve Verzeichnisse(Arraygrenze)
Verzeichnisse(Arraygrenze) = Pfad & Name1 & "\"
End If
End If
Name1 = Dir
Loop
End Sub

Private Function Ordnerwählen(ByVal strTitle As String) As String
Dim lngIDList As Long
Dim strBuffer As String
Dim UserBrowseInfo As BrowseInfo
With UserBrowseInfo
.hwndOwner = 0
.lpszTitle = lstrcat(strTitle, "")
.ulFlags = 3
End With
lngIDList = SHBrowseForFolder(UserBrowseInfo)
If (lngIDList) Then
strBuffer = Space(260)
SHGetPathFromIDList lngIDList, strBuffer
strBuffer = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
Ordnerwählen = strBuffer
End If
End Function

Antwort 2 von nighty

hi all :-)

ist eine pfadangabe ohne öffnen :-))

öffnendialog dann mit makroaufnahme leicht nachvollziehbar

gruss nighty

Antwort 3 von Kauz

Hi nighty
besten Dank für den Code...

werd mich heute Abend mal durcharbeiten.

achja:
Vielen Dank auch für's Lob in diesem Thread:
https://supportnet.de/threads/1523508
(Mit Makro umsortieren)
Hab ich beim letzten Posten dort Vergessen. :-)

Gruss Andreas

Antwort 4 von Kauz

Hi nighty...
hab mich inzwischen durchgearbeitet!

In etwas kürzerer Form ist es in meine Tabelle eingebaut.

Dank an den 'anderen' netten User für's Entwickeln...
und Dank an Dich für's Posten auf meine Frage.

Es ist genau das, was ich gesucht hab!!!!

Gruss Andreas

Antwort 5 von Kauz

Hallöchen...
ich hätt gern noch ein 'Nachschlag':

Ist es möglich, das sich die Dialogbox mit einem bestimmten
Verzeichniss meldet und nicht den Arbeitsplatz als Start anbietet?

Ich hab selbst keine Stelle gefunden, wo man das einbauen kann.

mfg,
Andreas

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Suche in allen vorhandenen Beiträgen: