Witam, używam tego makra do wyświetlania tytułu dokumentu Solidworks w eksploratorze Windows. Chciałem wiedzieć, czy możliwe jest aktywowanie makra podczas każdego nagrywania (bez ingerencji użytkownika)? z tego co rozumiem najlepszym rozwiązaniem byłby dodatek, ale ponieważ zmagam się z VS Studio to szukam alternatywy. Dziękuję
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim propMgr As CustomPropertyManager
Dim titleValue As String
Dim resolved As String
Dim wasResolved As Boolean
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox "No document is open!"
Exit Sub
End If
' Access the custom property manager
Set propMgr = swModel.Extension.CustomPropertyManager("")
' Read current value of custom property "Title"
wasResolved = propMgr.Get4("Title", False, resolved, titleValue)
If titleValue = "" Then
MsgBox "Custom property 'Title' is empty!"
Exit Sub
End If
' Copy to Summary Info Title
swModel.SummaryInfo(swSumInfoTitle) = titleValue
' Optional: read back to verify
MsgBox "Summary Info Title set to: " & swModel.SummaryInfo(swSumInfoTitle)
End Sub
Brakuje też kilku istotnych informacji: Wersja Solidworks Zakres makra (wszystkie dokumenty Solidworks, tylko części, części i złożenia, rysunki...?)
Co rozumiem: W makrze wyodrębniasz wartość niestandardowej właściwości " Tytuł " z otwartego dokumentu SolidWorks, a następnie umieszczasz tę wartość w polu Tytuł informacji podsumowujących dokument, sprawdzając, czy nie ma błędów braku dokumentu lub pustych właściwości.
(Uwaga: Radzę nie używać tej samej właściwości (nazwy właściwości) kilka razy dla różnych zmiennych... (tutaj " Tytuł " dla Właściwości niestandardowych i " Tytuł " dla właściwości Podsumowanie systemu Windows (zakładka: Podsumowanie w podsumowaniu informacji dokumentu Solidworks)
Proponuję dostosować swoje makro tak, aby działało na wszystkich plikach w danym katalogu:
Od Ciebie zależy, czy zmodyfikujesz wartość w: folderPath = "C:\Ścieżka\Do\Folderu"
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim propMgr As CustomPropertyManager
Dim titleValue As String
Dim resolved As String
Dim wasResolved As Boolean
Dim filePath As String
Dim folderPath As String
Sub main()
Set swApp = Application.SldWorks
' Modifier ici pour mettre le chemin du dossier
folderPath = "C:\Chemin\Vers\Le\Dossier\"
filePath = Dir(folderPath & "*.sld*") ' Trouve les fichiers .sldprt, .sldasm, .slddrw
Do While filePath <> ""
' Ouvre le document
Set swModel = swApp.OpenDoc6(folderPath & filePath, _
GetDocType(folderPath & filePath), _
0, "", 0, 0)
If Not swModel Is Nothing Then
Set propMgr = swModel.Extension.CustomPropertyManager("")
wasResolved = propMgr.Get4("Title", False, resolved, titleValue)
If titleValue <> "" Then
swModel.SummaryInfo(swSumInfoTitle) = titleValue
swModel.Save
End If
swApp.CloseDoc swModel.GetTitle
Else
MsgBox "Impossible d'ouvrir : " & filePath
End If
filePath = Dir() ' Passe au fichier suivant
Loop
MsgBox "Traitement terminé."
End Sub
' Fonction utilitaire pour déterminer le type de document selon l'extension
Function GetDocType(fileName As String) As Long
Dim ext As String
ext = LCase$(Mid$(fileName, InStrRev(fileName, ".") + 1))
Select Case ext
Case "sldprt"
GetDocType = 1 ' pièce
Case "sldasm"
GetDocType = 2 ' assemblage
Case "slddrw"
GetDocType = 3 ' mise en plan
Case Else
GetDocType = 0 ' inconnu
End Select
End Function
=> jest to łatwiejsze dzięki narzędziom MyCadTools, takim jak Smartproperties, lub w stacji przetwarzania za pomocą narzędzi Integration lub batchProperties.
Witam, dziękuję za odpowiedź i linki (bardzo przydatne).
Moim celem nie jest wykonanie makra na każdym rekordzie części (złożeniu, części lub rysunku), ale raczej pobranie wartości właściwości o nazwie Title i wyświetlenie jej w eksploratorze Windows, tak jak w przypadku tego przechwytywania na każdym rekordzie, stąd uwaga o tym, że makro nie jest w tym przypadku najlepszym rozwiązaniem, ponieważ musi być wykonywane za każdym razem.
Czy możliwe jest na przykład automatyczne uruchomienie makra podczas nagrywania (montażu, rysunku lub części) bez ingerencji użytkownika? Wydaje mi się, że jest to możliwe w przypadku dodatków, ale nie jest bezpieczne w przypadku makr VBA.
Witam Jest to możliwe w przypadku vba, ale musisz zmodyfikować skrót uruchamiający oprogramowanie, aby makro działało po otwarciu oprogramowania. Możesz przechwytywać działania w oprogramowaniu, ale musisz scementować kod i jego drzwi wyjściowe, aby uniknąć zachowań blokujących użycie. Innym rozwiązaniem jest utworzenie makra nagrywania, które zastępuje ikonę nagrywania oprogramowania i umieszczenie na nim skrótu Ctrl+S, tak aby był całkowicie przezroczysty dla użytkownika.
Wypróbowałem obie metody i wszystkie działają świetnie.
Tylko ostatnie pytanie, chciałbym spróbować utworzyć dodatek za pomocą VS. Mam kod, utwórz bibliotekę dll, ale dodatek nie jest wyświetlany w SolidWorks.
Bonjour; Il faut probablement charger l'add-in via les compléments Solidworks. Utiliser la méthode ISldWorks::LoadAddIn en passant le nom de l'add-in Język PUIS Après avoir chargé l'add-in, utilisez ISldWorks::GetAddInObject
Pour une documentation plus globale sur la creation d'add-in:
Il devrait maintenant etre accessible depuis:
Si le code est bien realisé, il devrait être accessible ici:
Serait-il possible de nous fournir le code réalisé ?
Zarejestruj CLSID dodatku w folderze HKEY_LOCAL_MACHINE\SOFTWARE\SOLIDWORKS\AddIns i ustaw następujące klucze rejestru:
Wartość domyślna to 1 lub 0, gdzie wartość 1 włącza dodatek w menedżerze dodatków, tak aby był ładowany, gdy użytkownik uruchamia oprogramowanie SOLIDWORKS.
Opis do tekstowego opisu dodatku, który jest wyświetlany w menedżerze dodatków.
Tytuł tekstu Tytuł opisu, który jest wyświetlany w menedżerze dodatków.
Wywołaj ISldWorks::SetAddinCallbackInfo i przekaż uchwyt instancji dodatku oraz obiekt, który obsługuje metody wywołania zwrotnego. Oprogramowanie SOLIDWORKS zatrzymuje ten obiekt i wykonuje wywołania zwrotne.
Wywołaj ISldWorks::AddMenuItem3 i przekaż metodę wywołania zwrotnego skojarzoną z elementem menu.
Wywołaj ISldWorks::AddToolbar4 i przekaż metodę wywołania zwrotnego powiązaną z przyciskiem paska narzędzi.
On en parle ici aussi:
Et un autre exemple de code ici:
Dans cet exemple la ligne qui t'intéresse est la création de la clef dans le base de registre pour l'identification de l'add-in dans le menu Solidworks: Dim nazwa klucza Jako ciąg = « SOFTWARE\SolidWorks\Addins{ » + t.GUID. ToString() + « } »
Mais sans ton code je suis en train de te fournir des documents en vrac sans contexte.
Podczas uruchamiania kodu pojawił się następujący błąd: Wystąpił błąd podczas zapisywania informacji rejestracyjnych w rejestrze. Do korzystania z wybranych opcji wymagane są uprawnienia administratora. Użyj wiersza polecenia administratora, aby wykonać te zadania. Teraz otwieram VS w trybie administratora, ale nadal nie działa
Nie sądzę, aby problemem było uruchomienie VS w trybie administratora. Problemem jest głównie dostęp do zapisu w rejestrze (znaczenie komunikatu o błędzie). Ogólnie rzecz biorąc, w bezpiecznym środowisku rejestr jest blokowany przez dział IT, aby uniemożliwić komukolwiek modyfikowanie tej bazy danych, co może całkowicie zakłócić działanie stacji roboczej, prowadząc do czystego i prostego formatowania. Aby wdrożyć dodatek, musisz skontaktować się z działem IT, kto zajmie się wdrożeniem (czy chce to zrobić i czy nie ma potrzeby wykonywania różnych iteracji, które będą wymagały ponownego wdrożenia). Dlatego osobiście wolę VBA, który jest znacznie bardziej elastyczny w IT i przynajmniej mogę zarządzać moimi makrami według własnego uznania.