VBA - Ordnerauswahldialog mit Pfad anzeigen

Hallo an alle

Das erste Mal für mich, dass ich im Forum poste (und ich weiß nicht allzu viel über SD)

 

Leider kann ich die Lösung für das, was ich suche, nicht finden.

Ich möchte einen Ordnerauswahldialog wie folgt anzeigen: 

 

Dim SH als Shell32.Shell

Dim F als Shell32.Folder

Set SH = Neue Shell32.Shell

Setze F = SH. BrowseForFolder(&H0&, "Nachricht", &H1,"InitialFolder")

 

Es funktioniert, aber wenn ich "InitialFolder" mit einem Pfad fülle, blockiert es meine Auswahl zum zugrunde liegenden Ordner :/

Wenn ich nur möchte, dass die Verzeichnisse auf das von mir eingegebene Verzeichnis verweisen oder entstapelt werden.

Indem Sie die Möglichkeit haben, zu den übergeordneten Ordnern zurückzukehren.

 

Ich hoffe, ich war klar

Vielen Dank, dass Sie meinen Beitrag bisher gelesen haben

1 „Gefällt mir“

Hallo, ist es für PDM oder für SolidWorks?

In jedem Fall heißt es auf der Hilfeseite von BrowseForFolder, dass es veraltet ist und dass Sie Folgendes verwenden sollten:

IEdmVault11::BrowseForFolder2.

Siehe hier:

http://help.solidworks.com/2015/English/api/epdmapi/EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmVault11~BrowseForFolder2.html

1 „Gefällt mir“

Die Frage ist nicht ganz klar
Es wäre notwendig, mehr zu spezifizieren

Hallo und danke, dass du mir geantwortet hast,

Ja, sorry für die unklare Frage^^

Also, es ist schon VBA-Code für Solidworks

Dann weiß ich im Grunde nicht, wie ich :

- Zeigen Sie im Dialogfeld auf ein Verzeichnis, das ich als Parameter angebe

-Mit dem Dialogfeld werden alle Verzeichnisse angezeigt, nicht nur diejenigen, die dem von mir eingegebenen Parameter zugrunde liegen)

 

Ich hoffe, es ist klarer

Versuchen Sie, wie oben erwähnt, BrowseForFolder2 anstelle von BrowseForFolder zu verwenden , das veraltet ist:

http://help.solidworks.com/2015/English/api/epdmapi/EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmVault11~BrowseForFolder2.html

Hallo

Okay, danke für die Informationen.

 

Aber ich verstehe nicht wirklich, wie ich diese Funktion tatsächlich zum Laufen bringen kann

Wenn Sie mir bitte helfen könnten!

Weil ich hier kämpfe :/

Hier sind einige Beispiele für funktionale Codes:

http://www.ammara.com/access_image_faq/browse_for_folder_dialog.html

https://forum.solidworks.com/thread/25843

https://forum.solidworks.com/thread/89758

Es wird einfacher sein, bereits fertiggestellten Code herunterzuladen, als zu versuchen, ein vollständiges Makro zu schreiben, wenn Sie nicht allzu viel über VBA-Programmierung wissen.

Hallo

 

Vielen Dank für Ihre Hilfe, aber leider ist es nicht das, wonach ich suche.

Die Codes, die Sie mir zur Verfügung gestellt haben, verwenden die einfache BrowseForFolder-Funktion.

Sie haben einfach ein zusätzliches Benutzerformular eingefügt, aber das ist nicht das, wonach ich suche.

 

Tatsächlich hätte ich gerne genau die gleiche Funktion: BrowseForFolder

Aber wenn wir ihm einen Parameter übergeben: initialFolder, verbietet es uns sowieso nicht, dorthin zu gehen, wo wir wollen.

 

Das heißt, wenn initialFolder = "C:\Benutzer\Öffentlich\Musik\Beispielmusik"

Ich möchte in der Lage sein, zu "C:\Users\Public" zu gehen.

 

Tut mir leid, dass ich SolidWorks nicht zum Testen habe, Sie können versuchen, dieses Tutorial anzusehen:

 http://www.cadsharp.com/videos/lesson-1-10-vba/ (Englisch)

 

Hallo

 

Ich habe mir deine Links angeschaut, leider möchte ich keine Referenzen oder Komponenten verwenden, die nicht von allen Stationen verwaltet werden!

 

Trotzdem vielen Dank für Ihre Hilfe!! Es ist sehr schön

 

Ich lasse den Beitrag offen, bis ich die Lösung gefunden habe

Hallo 

Es ist in Ordnung, ich habe eine Lösung gefunden!!

Nach mehreren Versuchen überlasse ich Ihnen den Code 

Die Lösungen für diese beiden Positionen:

http://codes-sources.commentcamarche.net/forum/affich-15102-selectionner-un-repertoire-avec-une-boite-de-dialogue-en-vba

http://www.cadsharp.com/blog/solidworks-macro-compatible-64-vba7/

 

Nach Belieben zu ändern:

Privater Typ BROWSEINFO ', der von der Funktion GetFolderName verwendet wird

hBesitzer als LongPtr

pidlRoot As LongPtr

pszDisplayName als Zeichenfolge

lpszTitle als Zeichenfolge

ulFlags als LongPtr

lpfn Als LongPtr

lParam als LongPtr

iImage als LongPtr

Art des Endes

#If VBA7 dann

    Private Deklarieren der PtrSafe-Funktion SHGetPathFromIDList Lib "shell32.dll" aka "SHGetPathFromIDListA" (ByVal pidl als LongPtr, ByVal pszPath als String) als LongPtr

    Private Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" aka "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As LongPtr

#Else

    'Private Declare Function SHGetPathFromIDList lib "shell32.dll" aka "SHGetPathFromIDListA" (ByVal pidl as LongPtr, ByVal pszPath as String) so lang

    'Private Declare Function SHBrowseForFolder Lib "shell32.dll" aka "SHBrowseForFolderA" (lpBrowseInfo as BROWSEINFO) so lang

#End Eibe

 

Funktion GetFolderName(Msg als Zeichenfolge) als Zeichenfolge

' gibt den Namen des vom Benutzer ausgewählten Ordners zurück

Dim bInfo As BROWSEINFO, path As String, r As LongPtr, x As LongPtr, pos As Integer

'bInfo.pidlRoot 0& ' Stammordner Desktop

Wenn IsMissing(Msg) dann

bInfo.lpszTitle = "Arbeitsverzeichnis auswählen" ' der Titel des Dialogs

Oder

bInfo.lpszTitle = Msg ' der Titel des Dialogs

Ende, wenn

bInfo.ulFlags = &H1 ' Typ des zurückzugebenden Verzeichnisses

x = SHBrowseForFolder(bInfo) ' zeigt das Dialogfeld an

' Analysieren des Ergebnisses

Pfad = Leerzeichen$(512)

r = SHGetPathFromIDList(ByVal x, ByVal Pfad)

Wenn r Dann

pos = InStr(Pfad, Chr$(0))

GetFolderName = Links(Pfad, pos - 1)

Oder

GetFolderName = ""

Ende, wenn

Ende-Funktion

 

Privater Sub CommandButton2_Click()

Dim Rep0 als Zeichenfolge

Rep0 = GetFolderName("Arbeitsverzeichnis auswählen")

FrmE2S.TextBox1.Text = Rep0

Ende Sub

:)

Hallo

 

Eine kleine Zusammenfassung!!

Wenn Sie die richtige Antwort finden: 

http://www.lynkoa.com/forum/solidworks/bouton-parcourir-macro-vba

Betrüben^^

Viel Glück an alle!

1 „Gefällt mir“