Hallo, ik gebruik deze macro om de titel van een Solidworks-document weer te geven in Windows Verkenner. Ik wilde weten of het mogelijk was om de macro tijdens elke opname te activeren (zonder tussenkomst van de gebruiker)? voor zover ik begrijp, zou een invoegtoepassing de beste oplossing zijn, maar aangezien ik worstel met VS Studio, ben ik op zoek naar een alternatief. Bedankt
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
En er ontbreken enkele essentiële stukjes informatie: De Solidworks-versie De reikwijdte van de macro (alle Solidworks-documenten, alleen onderdelen, onderdelen en assemblages, tekeningen...?)
Wat ik begrijp: In uw macro extraheert u de waarde van de aangepaste eigenschap " Titel " uit een geopend SolidWorks-document en plaatst u die waarde vervolgens in het veld Titel van de overzichtsinformatie van het document, waarbij u controleert op geen document of lege eigenschapsfouten.
(Opmerking: ik raad u aan om dezelfde eigenschap (de naam van de eigenschap) niet meerdere keren te gebruiken voor verschillende variabelen... (hier " Titel " voor Aangepaste Eigenschappen en " Titel " voor Windows Samenvattende eigenschappen (tabblad: Samenvatting in de informatiesamenvatting van het Solidworks-document)
Ik stel voor dat u uw macro aanpast zodat deze werkt op alle bestanden in een bepaalde map:
Het is aan u om de waarde aan te passen in: folderPath = "C:\Path\To\Folder"
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
Hallo, bedankt voor het antwoord en de links (erg handig).
Mijn doel is niet om de macro uit te voeren op elk onderdeelrecord (assembly, onderdeel of tekening), maar eerder om de waarde van de eigenschap met de naam Titel op te halen en deze weer te geven in Windows Verkenner zoals op deze opname op elk record, vandaar de opmerking over het feit dat de macro in dit geval niet de beste oplossing is, omdat deze elke keer moet worden uitgevoerd.
Is het bijvoorbeeld mogelijk om de macro automatisch te starten tijdens een opname (assemblage, tekening of onderdeel) zonder tussenkomst van de gebruiker? Het lijkt mij dat dit mogelijk is met add-ins, maar niet veilig voor VBA-macro's.
Hallo Het is mogelijk met VBA, maar je moet de snelkoppeling wijzigen om SW te starten, zodat de macro wordt uitgevoerd zodra SW is geopend. Je kunt acties onderscheppen in SW, maar je moet de code en de uitgangsdeuren cementeren om te voorkomen dat je gedrag krijgt dat het gebruik blokkeert. Een andere oplossing is om een opnamemacro te maken die het SW-opnamepictogram vervangt en de Ctrl+S-snelkoppeling erop te zetten zodat deze volledig transparant is voor de gebruiker.
Ik heb beide methoden geprobeerd en ze werken allemaal geweldig.
Nog een laatste vraag, ik wil proberen de invoegtoepassing te maken met VS. Ik heb de code, maak de dll aan, maar de invoegtoepassing wordt niet weergegeven op 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 puis Après avoir chargé l'add-in, utilisez ISldWorks::GetAddInObject
Pour une documentation plus globale sur la création d'add-in:
Il devrait maintenant être accessible depuis:
Si le code est bien realisé, il devrait être accessible ici:
Serait-il possible de nous fournir le code réalisé ?
Registreer de CLSID van de invoegtoepassing in HKEY_LOCAL_MACHINE\SOFTWARE\SOLIDWORKS\AddIns en stel de volgende registersleutels in:
Standaard ingesteld op 1 of 0, waarbij 1 de invoegtoepassing inschakelt in de invoegtoepassingbeheerder, zodat deze wordt geladen wanneer de gebruiker de SOLIDWORKS-software start.
Beschrijving naar een tekstbeschrijving van de invoegtoepassing die wordt weergegeven in de invoegtoepassingbeheerder.
Titel van een teksttitel van de beschrijving die wordt weergegeven in de invoegtoepassingmanager.
Roep ISldWorks::SetAddinCallbackInfo aan en geef de instantie-handle van de invoegtoepassing en het object dat de callback-methoden ondersteunt, door. De SOLIDWORKS-software houdt dit object vast en voert callbacks uit.
Roep ISldWorks::AddMenuItem3 aan en geef de terugbelmethode door die aan het menu-item is gekoppeld.
Roep ISldWorks::AddToolbar4 aan en geef de callback-methode door die is gekoppeld aan de werkbalkknop.
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 keyname As String = « SOFTWARE\SolidWorks\Addins{ » + t.GUID. ToString() + « } »
Mais sans ton code je suis en train de te fournir des documents en vrac sans contexte.
Inderdaad, als u de rechten hebt om het register te wijzigen, wordt de invoegtoepassing die met de SW-tutorial is gemaakt, weergegeven zonder iets anders aan te raken
Tijdens het starten van de code kreeg ik de volgende foutmelding: Er is een fout opgetreden tijdens het schrijven van de registratiegegevens naar het register. Beheerdersrechten zijn vereist om de geselecteerde opties te gebruiken. Gebruik een beheerdersopdrachtprompt om deze taken uit te voeren. Nu open ik VS in beheerdersmodus, maar het werkt nog steeds niet
Ik denk niet dat het probleem de lancering van VS in de admin-modus is. Het is vooral de schrijftoegang tot het register die het probleem is (betekenis van de foutmelding). Over het algemeen wordt het register in een beveiligde omgeving vergrendeld door IT om te voorkomen dat iemand deze database wijzigt, wat een werkstation volledig in de steek kan laten, wat leidt tot pure en eenvoudige opmaak. Om de add-in te implementeren, moet je met de IT zien wie voor de implementatie zal zorgen (als ze het willen doen en als het niet nodig is om verschillende iteraties uit te voeren die opnieuw moeten worden geïmplementeerd). Daarom geef ik persoonlijk de voorkeur aan VBA, dat veel flexibeler omgaat met IT en ik kan in ieder geval mijn macro's beheren zoals ik dat wil.