Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ordnerauswahl mit GetDirectory

Ordnerauswahl mit GetDirectory
28.05.2007 08:45:00
Gerhard
Hallo zusammen,
Wie kann man mit der Function GetDirecotory gleich auf einen vordefinierten Ordner anzeigen lasse?
Ich habe einen relativ langen Path und muß jedersmal nach dem Start diesen Path immer wieder neu auswählen und diesen Path sollte vordefiert schon angezeigt werden!
In meinem Fall heißt er:
D:\Daten\Produktion\Petershausen\GMT\Herrmann\Messungen\2007
Vielen Dank für Eure Hilfe

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordnerauswahl mit GetDirectory
28.05.2007 08:52:24
Oberschlumpf
Hi Gerhard
Schreibe vorm Aufruf der Funktion diesen Code:

ChDrive("D:\")
ChDir("D:\Daten\Produktion\Petershausen\GMT\Herrmann\Messungen\2007")
'dein weiterer Code


Konnte ich helfen?
Ciao
Thorsten

AW: Ordnerauswahl mit GetDirectory
28.05.2007 09:14:00
Gerhard
Hallo Thorsten,
Wohin soll ich den Code eintragen?
Option Explicit
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Declare

Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare 

Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long


Function GetDirectory(Optional Msg As String) As String
Dim bInfo As BROWSEINFO
Dim Path As String
Dim r As Long, x As Long, pos As Integer
bInfo.pidlRoot = 0&
If IsMissing(Msg) Then
bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
Else
bInfo.lpszTitle = Msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
GetDirectory = Left(Path, pos - 1)
Else
GetDirectory = ""
End If
End Function


Anzeige
AW: Ordnerauswahl mit GetDirectory
28.05.2007 09:19:22
Oberschlumpf
Hi Gerhard,
na, irgendwo in deinem Code müsste ja die Zeile
GetDirectory
oder
Call GetDirectory
stehen, damit diese Funktion auch aufgerufen wird.
Und genau VOR dieser Zeile schreibst du den Code, den ich dir genannt habe.
Konnte ich helfen?
Ciao
Thorsten

AW: Ordnerauswahl mit GetDirectory
28.05.2007 10:00:00
Gerhard
Hallo Thorsten,
anbei meine Excel Datei mit dem VBA-Code,
wo muß der Code denn rein?
https://www.herber.de/bbs/user/42806.xls
Gruß Gerhard

AW: Ordnerauswahl mit GetDirectory
28.05.2007 10:27:24
Oberschlumpf
Hi Gerhard
Wenn die anderen Ideen dir (auch noch) nicht weiterhelfen..dann meine Frage...
Wann soll die Funktion denn gestartet werden?
Das haste leider nich dazu geschrieben.
Ciao
Thorsten

Anzeige
AW: Ordnerauswahl mit GetDirectory
28.05.2007 11:35:00
Gerhard
Hallo Thorsten,
Der Dialog Ordnerauswahl mit dem vordefinierten Verzeichnis soll nach Drücken des Buttons >>Aktion und >>Datenübernahme Gruß
Gerhard

AW: Ordnerauswahl mit GetDirectory
28.05.2007 12:02:00
Oberschlumpf
Hi Gerhard
Nun hab ichs gefunden :-) und kann dein Problem nachvollziehen.
Mit "deiner" Funktion finde ich auch keine Möglichkeit, einen Wunschstartordner vorzugeben.
Aber versuch doch mal die Funktion von Ransi.
Da kann man einen Startordner vorgeben. Einziger Nachteil ist aber, dass der Startordner gleichzeitig der oberste Ordner ist. Aber wenn du in der Ordnerhirarchie auch oberhalb deines Startordners Zugriff haben musst, könntest du ja einen weiteren Button einbauen, der dann eben wieder ganz oben anfängt, oder?
Ciao
Thorsten

Anzeige
AW: Ordnerauswahl mit GetDirectory
28.05.2007 12:16:00
Gerhard
Hallo Thorsten,
trotzdem vielen dank für Deine Bemühungen,
Gruß
Gerhard

Deine Beispieltabelle
28.05.2007 12:16:56
ransi
Hallo Gerhard
Hab mal 2 Möglichkeiten eingebaut.
Die Variante mit FileDialog funzt auch.
Schau es dir mal an:
https://www.herber.de/bbs/user/42807.xls
ransi

AW: Deine Beispieltabelle
28.05.2007 14:03:31
Gerhard
Hallo Ransi,
Vielen Dank funktioniert super.
Gruß
Gerhard

AW: Ordnerauswahl mit GetDirectory
28.05.2007 10:21:00
ransi
HAllo Gerhard
Teste mal diese Function:
Public Function GetDirectory(Optional capt, Optional StartVerzeichniss)
Dim objShell As Object
Set objShell = CreateObject("Shell.Application").BrowseForFolder(0&, capt, 0, StartVerzeichniss)
If Not objShell Is Nothing Then GetDirectory = objShell.Self.Path
End Function


Dann musst du das im Aufruf so abändern:
strPath = GetDirectory("Verzeichnis für Periodensheet's auswäheln:", "D:\Daten\Produktion\Petershausen\GMT\Herrmann\Messungen\2007")

ransi

Anzeige
AW: Ordnerauswahl mit GetDirectory
28.05.2007 10:21:00
Nepumuk
Hallo Gerhard,
so:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit
Option Private Module

Private Declare Function MoveWindow Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal nWidth As Long, _
    ByVal nHeight As Long, _
    ByVal bRepaint As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32.dll" ( _
    ByVal nIndex As Long) As Long
Private Declare Function GetWindowRect Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByRef lpRect As RECT) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" ( _
    lpbi As InfoT) As Long
Private Declare Function CoTaskMemFree Lib "ole32" ( _
    ByVal hMem As Long) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" ( _
    ByVal lpStr1 As String, _
    ByVal lpStr2 As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" ( _
    ByVal pList As Long, _
    ByVal lpBuffer As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassname As String, _
    ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
    ByVal hwnd As Long, _
    ByVal Msg As Long, _
    ByRef wParam As Any, _
    ByRef lParam As Any) As Long

Private Type InfoT
    hwnd As Long
    Root As Long
    DisplayName As Long
    Title As Long
    Flags As Long
    FName As Long
    lParam As Long
    Image As Long
End Type

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public Enum BIF_Flag
    BIF_RETURNONLYFSDIRS = &H1
    BIF_DONTGOBELOWDOMAIN = &H2
    BIF_STATUSTEXT = &H4
    BIF_RETURNFSANCESTORS = &H8
    BIF_EDITBOX = &H10
    BIF_VALIDATE = &H20
    BIF_NEWDIALOGSTYLE = &H40
    BIF_BROWSEINCLUDEURLS = &H80
    BIF_BROWSEFORCOMPUTER = &H1000
    BIF_BROWSEFORPRINTER = &H2000
    BIF_BROWSEINCLUDEFILES = &H4000
    BIF_SHAREABLE = &H8000
End Enum

Private Const SM_CXFULLSCREEN = &H10
Private Const SM_CYFULLSCREEN = &H11

Private Const BFFM_SETSELECTION = &H466
Private Const BFFM_INITIALIZED = &H1

Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"

Private s_BrowseInitDir As String

Public Function fncGetFolder( _
        Optional ByVal sMsg As String = "Bitte wählen Sie ein Verzeichnis", _
        Optional ByVal lFlag As BIF_Flag = BIF_RETURNONLYFSDIRS, _
        Optional ByVal sPath As String = "C:\") As String

    Dim xl As InfoT, IDList As Long, RVal As Long, FolderName As String
    s_BrowseInitDir = sPath
    With xl
        .hwnd = FindWindow(GC_CLASSNAMEMSEXCEL, vbNullString)
        .Root = 0
        .Title = lstrcat(sMsg, "")
        .Flags = lFlag
        .FName = FuncCallback(AddressOf BrowseCallback)
    End With
    IDList = SHBrowseForFolder(xl)
    If IDList <> 0 Then
        FolderName = Space(256)
        RVal = SHGetPathFromIDList(IDList, FolderName)
        CoTaskMemFree (IDList)
        FolderName = Trim$(FolderName)
        FolderName = Left$(FolderName, Len(FolderName) - 1)
    End If
    fncGetFolder = FolderName
End Function

Private Function BrowseCallback( _
        ByVal hwnd As Long, _
        ByVal uMsg As Long, _
        ByVal wParam As Long, _
        ByVal lParam As Long) As Long

    If uMsg = BFFM_INITIALIZED Then
        Call SendMessage(hwnd, BFFM_SETSELECTION, ByVal 1&, ByVal s_BrowseInitDir)
        Call CenterDialog(hwnd)
    End If
    BrowseCallback = 0
End Function

Private Function FuncCallback(ByVal nParam As Long) As Long
    FuncCallback = nParam
End Function

Private Sub CenterDialog(ByVal hwnd As Long)
    Dim WinRect As RECT, ScrWidth As Integer, ScrHeight As Integer
    Dim DlgWidth As Integer, DlgHeight As Integer
    GetWindowRect hwnd, WinRect
    DlgWidth = WinRect.Right - WinRect.Left
    DlgHeight = WinRect.Bottom - WinRect.Top
    ScrWidth = GetSystemMetrics(SM_CXFULLSCREEN)
    ScrHeight = GetSystemMetrics(SM_CYFULLSCREEN)
    MoveWindow hwnd, (ScrWidth - DlgWidth) / 2, _
        (ScrHeight - DlgHeight) / 2, DlgWidth, DlgHeight, 1
End Sub

Public Sub test()
    Dim strFolder As String
    strFolder = fncGetFolder(, , "D:\Daten\Produktion\Petershausen\GMT\Herrmann\Messungen\2007\")
End Sub

Gruß
Nepumuk
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige