VBA - Pokaż okno dialogowe wyboru folderu ze ścieżką

Witam wszystkich,

Pierwszy raz dla mnie, kiedy piszę na forum (a nie znam się za bardzo na SD)

 

Niestety dla mnie nie mogę znaleźć rozwiązania na to, czego szukam.

Chciałbym wyświetlić okno dialogowe wyboru folderu w następujący sposób: 

 

Dim SH jako Shell32.Shell

Dim F as Shell32.Folder

Ustaw SH = New Shell32.Shell

Ustaw F = SH. BrowseForFolder(&H0&, "Wiadomość", &H1;"Folder_początkowy")

 

Działa, ale jeśli wypełnię "InitialFolder" ścieżką, blokuje mój wybór do folderu źródłowego :/

Kiedy chcę tylko, aby wskazywał lub usuwał stos katalogów do katalogu, do którego wprowadziłem.

Dzięki możliwości powrotu do folderów nadrzędnych.

 

Mam nadzieję, że wyraziłem się jasno

Dziękuję za przeczytanie mojego dotychczasowego posta

1 polubienie

Cześć, czy to dla PDM czy dla SolidWorks?

W każdym razie na stronie pomocy BrowseForFolder jest napisane, że jest przestarzały i że należy użyć:

IEdmVault11::PrzeglądajdlaFolderu2.

Zobacz tutaj:

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

1 polubienie

Pytanie nie jest zbyt jasne
Konieczne byłoby doprecyzowanie

Witam i dziękuję za odpowiedź,

Tak, przepraszam za niejasne pytanie^^

Tak więc jest to już kod VBA dla Solidworks

Wtedy w zasadzie nie wiem jak:

-W oknie dialogowym wskaż katalog, który wskazuję jako parametr

-W oknie dialogowym wyświetl wszystkie katalogi, a nie tylko te, które są podstawą wprowadzonego przeze mnie parametru)

 

Mam nadzieję, że jest jaśniej

Jak powiedziałem powyżej, spróbuj użyć BrowseForFolder2 zamiast BrowseForFolder, który jest przestarzały:

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

Witam

Dobra, dzięki za informację.

 

Ale tak naprawdę nie rozumiem, jak sprawić, by ta funkcja działała w rzeczywistości 

Jeśli mógłbyś mi pomóc, proszę!

Bo mi tu jest ciężko :/

Oto kilka przykładów kodów funkcjonalnych:

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

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

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

Łatwiej będzie pobrać już gotowy kod, niż próbować napisać pełne makro, jeśli nie wiesz zbyt wiele o programowaniu VBA.

Witam

 

Dziękuję za pomoc, ale niestety to nie jest to, czego szukam.

Kody, które mi dostarczyłeś, używają prostej funkcji BrowseForFolder.

Po prostu umieścili dodatkowy formularz użytkownika, ale to nie jest to, czego szukam.

 

W rzeczywistości chciałbym mieć dokładnie tę samą funkcję: BrowseForFolder

Ale jeśli przekażemy mu parametr: initialFolder, i tak nie zabrania nam iść tam, gdzie chcemy.

 

To znaczy, jeśli initialFolder = "C:\Users\Public\Music\Sample Music"

Chcę mieć możliwość przejścia do: "C:\Users\Public"

 

Przepraszam, że nie mam solidworks do przetestowania, możesz spróbować obejrzeć ten samouczek:

 http://www.cadsharp.com/videos/lesson-1-10-vba/ (w języku angielskim)

 

Witam

 

Spojrzałem na Twoje linki, niestety nie chcę korzystać z referencji lub komponentów, które nie są zarządzane przez wszystkie stacje!

 

Dziękuję i tak za pomoc!! To bardzo miłe

 

Zostawię post otwarty, dopóki nie znajdę rozwiązania

Witam 

w porządku, znalazłem rozwiązanie!!

Po wielu próbach zostawię Ci kod 

Rozwiązania dla tych dwóch pozycji:

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/

 

do modyfikacji według własnego uznania:

Typ prywatny BROWSEINFO ' używany przez funkcję GetFolderName

hWłaściciel As LongPtr

pidlRoot jako LongPtr

pszDisplayName As String (Ciąg Znaków)

lpszTitle As String (Ciąg Znaków)

ulFlags As LongPtr

lpfn jako LongPtr

lParam jako LongPtr

iImage jako LongPtr

Typ końca

#If VBA7 Następnie

    Private Declare PtrSafe Function SHGetPathFromIDList Lib "shell32.dll" aka "SHGetPathFromIDListA" (ByVal pidl as LongPtr, ByVal pszPath as String) as 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) tak długo

    'Private Declare Function SHBrowseForFolder Lib "shell32.dll" aka "SHBrowseForFolderA" (lpBrowseInfo as BROWSEINFO) tak długo, jak długo

#End Cis

 

Funkcja GetFolderName(Msg As String) Jako ciąg

' zwraca nazwę folderu wybranego przez użytkownika

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

'bInfo.pidlRoot 0& ' Folder główny Pulpit

Jeśli IsMissing(Msg) to

bInfo.lpszTitle = "Wybierz katalog roboczy" ' tytuł okna dialogowego

Inaczej

bInfo.lpszTitle = Msg ' tytuł okna dialogowego

Zakończ jeżeli:

bInfo.ulFlags = &H1 ' Typ katalogu do zwrócenia

x = SHBrowseForFolder(bInfo) ' wyświetl okno dialogowe

' Analizowanie wyniku

ścieżka = Spacja$(512)

r = SHGetPathFromIDList(ByVal x, ByVal ścieżka)

Jeśli r To

pos = InStr(ścieżka, Chr$(0))

GetFolderName = Left(ścieżka, pos - 1)

Inaczej

GetFolderName = ""

Zakończ jeżeli:

Zakończ funkcję

 

Prywatny Sub CommandButton2_Click()

Dim Rep0 As Ciąg

Rep0 = GetFolderName("Wybierz katalog roboczy")

FrmE2S.TextBox1.Text = Rep0

Koniec subwoofera

:)

Witam

 

Małe podsumowanie!!

Jeśli znajdziesz poprawną odpowiedź: 

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

Smucić^^

Powodzenia wszystkim!

1 polubienie