VBA - Dialoogvenster voor mapselectie met pad weergeven

Hallo allemaal,

Eerste keer voor mij dat ik post op het forum (en ik weet niet al te veel over SD)

 

Helaas voor mij kan ik de oplossing niet vinden voor wat ik zoek.

Ik wil graag een dialoogvenster voor het selecteren van mappen als volgt weergeven: 

 

Dim SH als Shell32.Shell

Dim F als Shell32.Map

Stel SH in = Nieuwe Shell32.Shell

Stel F = SH in. BrowseForFolder(&H0&, "Bericht", &H1,"InitialFolder")

 

Het werkt, maar als ik "InitialFolder" vul met een pad, blokkeert het mijn selectie naar de onderliggende map :/

Als ik alleen maar wil dat het de mappen naar de map verwijst of ontstapelt die ik heb ingevoerd.

Door de mogelijkheid te hebben om terug te keren naar bovenliggende mappen.

 

Ik hoop dat ik duidelijk was

Bedankt voor het lezen van mijn bericht tot nu toe

1 like

Hallo, is het voor PDM of voor SolidWorks?

In ieder geval staat op de helppagina van BrowseForFolder dat het verouderd is en dat je het volgende moet gebruiken:

IEdmVault11::BrowseForFolder2.

Zie hier:

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

1 like

De vraag is niet erg duidelijk
Het zou nodig zijn om meer te specificeren

Hallo en bedankt voor je antwoord,

Ja, sorry voor de onduidelijke vraag^^

Het is dus al VBA-code voor Solidworks

Dan weet ik eigenlijk niet hoe ik :

-Wijs met het dialoogvenster naar een directory die ik als parameter aangeef

-Met het dialoogvenster, toon alle mappen, niet alleen de mappen die ten grondslag liggen aan de parameter die ik heb ingevoerd)

 

Ik hoop dat het duidelijker is

Zoals ik hierboven al zei, probeer BrowseForFolder2 te gebruiken in plaats van BrowseForFolder, dat is afgeschaft:

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

Hallo

Oké, bedankt voor de informatie.

 

Maar ik begrijp niet echt hoe ik deze functie in feite kan laten werken

Als je me alsjeblieft zou kunnen helpen!

Omdat ik het hier moeilijk heb :/

Hier zijn enkele voorbeelden van functionele 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

Het is gemakkelijker om al gedane code te downloaden dan om te proberen een volledige macro te schrijven als je niet al te veel weet over VBA-programmering.

Hallo

 

Bedankt voor je hulp, maar helaas is het niet wat ik zoek.

De codes die je me hebt gegeven, maken gebruik van de eenvoudige BrowseForFolder-functie.

Ze hebben alleen een extra gebruikersformulier geplaatst, maar dat is niet wat ik zoek.

 

Sterker nog, ik zou precies dezelfde functie willen: BrowseForFolder

Maar als we het een parameter doorgeven: initialFolder, verbiedt het ons toch niet om te gaan en staan waar we willen.

 

Dat wil zeggen, als initialFolder = "C:\Users\Public\Music\Sample Music"

Ik wil in staat zijn om naar "C:\Users\Public" te gaan

 

Sorry dat ik geen solidworks heb om te testen, je kunt proberen deze tutorial te bekijken:

 Zie: http://www.cadsharp.com/videos/lesson-1-10-vba/

 

Hallo

 

Ik heb naar je links gekeken, helaas wil ik geen referenties of componenten gebruiken die niet door alle stations worden beheerd!

 

In ieder geval bedankt voor je hulp!! Het is erg leuk

 

Ik laat de post open totdat ik de oplossing vind

Hallo 

het is oké dat ik een oplossing heb gevonden!!

Na meerdere pogingen laat ik je de code achter

De oplossingen voor deze twee posities:

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/

 

Naar wens aan te passen:

Private Type BROWSEINFO ' gebruikt door de functie GetFolderName

hEigenaar Als LongPtr

pidlRoot als LongPtr

pszDisplayName als tekenreeks

lpszTitle als tekenreeks

ulFlags als LongPtr

lpfn als LongPtr

lParam als LongPtr

iImage als LongPtr

Type einde

#If VBA7 dan

    Private Declare PtrSafe-functie SHGetPathFromIDList Lib "shell32.dll" ook bekend als "SHGetPathFromIDListA" (ByVal pidl als LongPtr, ByVal pszPath als String) als LongPtr

    Private Declare PtrSafe-functie SHBrowseForFolder Lib "shell32.dll" ook bekend als "SHBrowseForFolderA" (lpBrowseInfo als BROWSEINFO) als LongPtr

#Else

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

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

#End Taxus

 

Functie GetFolderName(msg als tekenreeks) als tekenreeks

' retourneert de naam van de map die door de gebruiker is geselecteerd

Dim bInfo als BROWSEINFO, pad als string, r als LongPtr, x als LongPtr, pos als geheel getal

'bInfo.pidlRoot 0& ' Hoofdmap Bureaublad

Als IsMissing(msg) dan

bInfo.lpszTitle = "Selecteer een werkmap" ' de titel van het dialoogvenster

Anders

bInfo.lpszTitle = Msg ' de titel van het dialoogvenster

Einde als

bInfo.ulFlags = &H1 ' Type directory om terug te keren

x = SHBrowseForFolder(bInfo) ' het dialoogvenster weergeven

' Ontleed het resultaat

pad = Spatie$(512)

r = SHGetPathFromIDList(ByVal x, ByVal pad)

Als r Dan

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

GetFolderName = Links(pad, pos - 1)

Anders

GetFolderName = ""

Einde als

Functie beëindigen

 

Privé Sub CommandButton2_Click()

Dim Rep0 als snaar

Rep0 = GetFolderName("Kies een werkmap")

FrmE2S.TextBox1.Text = Rep0

Einde Sub

:)

Hallo

 

Een kleine samenvatting!!

Als je het juiste antwoord vindt: 

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

Bedroeven^^

Veel succes aan iedereen!

1 like