Hallo, ich verwende dieses Makro, um den Titel eines Solidworks-Dokuments im Windows-Explorer anzuzeigen. Ich wollte wissen, ob es möglich ist, das Makro während jeder Aufnahme zu aktivieren (ohne Benutzereingriff)? Soweit ich weiß, wäre ein Add-In die beste Lösung, aber da ich mit VS Studio zu kämpfen habe, suche ich nach einer Alternative. Vielen Dank
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
Und es fehlen einige wesentliche Informationen: Die Solidworks Version Der Geltungsbereich des Makros (alle Solidworks Dokumente, nur Teile, Teile und Baugruppen, Zeichnungen...?)
Was ich verstehe: In Ihrem Makro extrahieren Sie den Wert der benutzerdefinierten Eigenschaft " Titel " aus einem geöffneten SolidWorks Dokument und platzieren diesen Wert dann in das Feld Titel der Zusammenfassungsinformationen des Dokuments, wobei Sie nach Fehlern suchen, dass kein Dokument vorhanden oder leere Eigenschaften vorhanden sind.
(Hinweis: Ich rate Ihnen, dieselbe Eigenschaft (den Eigenschaftsnamen) nicht mehrmals für verschiedene Variablen zu verwenden... (hier " Titel " für benutzerdefinierte Eigenschaften und " Titel " für Windows Zusammenfassung Eigenschaften (Registerkarte: Zusammenfassung in der Informationszusammenfassung des Solidworks Dokuments)
Ich schlage vor, dass Sie Ihr Makro so anpassen, dass es für alle Dateien in einem bestimmten Verzeichnis funktioniert:
Es liegt an Ihnen, den Wert wie folgt zu ändern: folderPath = "C:\Pfad\Zu\Ordner"
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
Ansonsten ist das Thema hier schon diskutiert worden:
Hallo, danke für die Antwort und die Links (sehr nützlich).
Mein Ziel ist es nicht, das Makro für jeden Teiledatensatz (Baugruppe, Teil oder Zeichnung) auszuführen, sondern den Wert der Eigenschaft mit dem Namen Title abzurufen und ihn im Windows Explorer anzuzeigen, wie bei dieser Erfassung für jeden Datensatz, daher die Bemerkung, dass das Makro in diesem Fall nicht die beste Lösung ist, da es jedes Mal ausgeführt werden muss.
Ist es z.B. möglich, das Makro während einer Aufzeichnung (Baugruppe, Zeichnung oder Teil) automatisch zu starten, ohne dass der Benutzer eingreifen muss? Es scheint mir, dass dies mit Add-Ins möglich ist, aber nicht sicher für VBA-Makros.
Hallo Mit vba ist dies möglich, aber Sie müssen die Verknüpfung zum Starten von SW so ändern, dass das Makro ausgeführt wird, sobald SW geöffnet wird. Sie können Aktionen in SW abfangen, aber Sie müssen den Code und seine Ausgangstüren zementieren, um zu vermeiden, dass Verhaltensweisen die Verwendung blockieren. Eine andere Lösung besteht darin, ein Aufnahmemakro zu erstellen, das das SW-Aufnahmesymbol ersetzt, und die Tastenkombination Strg+S darauf zu setzen, so dass es für den Benutzer völlig transparent ist.
Ich habe beide Methoden ausprobiert und sie funktionieren alle hervorragend.
Nur noch eine letzte Frage, ich möchte versuchen, das Add-In mit VS zu erstellen. Ich habe den Code, erstelle die DLL, aber das Add-In wird nicht auf SolidWorks angezeigt.
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 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é ?
Registrieren Sie die CLSID des Add-Ins in HKEY_LOCAL_MACHINE\SOFTWARE\SOLIDWORKS\AddIns und legen Sie die folgenden Registrierungsschlüssel fest:
Der Standardwert ist 1 oder 0, wobei 1 das Add-In im Add-In-Manager aktiviert, sodass es geladen wird, wenn der Benutzer die SOLIDWORKS Software startet.
Description zu einer Textbeschreibung des Add-Ins, die im Add-In-Manager angezeigt wird.
Titel für einen Texttitel der Beschreibung, der im Add-In-Manager angezeigt wird.
Rufen Sie ISldWorks::SetAddinCallbackInfo auf, und übergeben Sie das Instanzhandle des Add-Ins und das Objekt, das die Rückrufmethoden unterstützt. Die SOLIDWORKS Software speichert dieses Objekt und führt Rückrufe durch.
Rufen Sie ISldWorks::AddMenuItem3 auf, und übergeben Sie die Callback-Methode, die dem Menüelement zugeordnet ist.
Rufen Sie ISldWorks::AddToolbar4 auf, und übergeben Sie die Callback-Methode, die der Symbolleistenschaltfläche zugeordnet ist.
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.
Wenn Sie über die Rechte zum Ändern der Registrierung verfügen, wird das mit dem SW-Tutorial erstellte Add-In angezeigt, ohne dass etwas anderes berührt wird
Beim Starten des Codes habe ich diesen Fehler erhalten: Beim Schreiben der Registrierungsinformationen in die Registrierung ist ein Fehler aufgetreten. Für die Verwendung der ausgewählten Optionen sind Administratorrechte erforderlich. Verwenden Sie eine Administratoreingabeaufforderung, um diese Aufgaben auszuführen. Jetzt öffne ich VS im Administratormodus, aber es funktioniert immer noch nicht
Ich glaube nicht, dass das Problem der Start von VS im Admin-Modus ist. Es ist vor allem der Schreibzugriff auf die Registry, der das Problem darstellt (Bedeutung der Fehlermeldung). Im Allgemeinen wird die Registrierung in einer sicheren Umgebung von der IT-Abteilung gesperrt, um zu verhindern, dass jemand diese Datenbank ändert, was eine Workstation vollständig im Stich lassen kann, was zu einer reinen und einfachen Formatierung führt. Um das Add-In bereitzustellen, müssen Sie sich mit der IT-Abteilung in Verbindung setzen, die sich um die Bereitstellung kümmert (wenn sie dies wünschen und wenn keine Notwendigkeit besteht, verschiedene Iterationen durchzuführen, die eine erneute Bereitstellung erfordern). Deshalb bevorzuge ich persönlich VBA, das viel flexibler mit der IT ist und zumindest meine Makros nach Belieben verwalten kann.