Ausführen eines Makros während einer Aufzeichnung

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

Hallo und herzlich willkommen;

Was genau meinst du mit:

Es ist nicht ganz klar...

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:

Aber es stört nicht viel:
=> Es ist möglich, den Solidworks Eigenschaften-Manager zu verwenden, um eine Variable in die Zusammenfassungsinformationen zu duplizieren.
https://help.solidworks.com/2022/french/SolidWorks/sldworks/HelpViewerDS.aspx?version=2022&prod=SolidWorks&lang=french&path=sldworks%2Fc_file_properties.htm&id=5fb9c079433c46d7961143b30be81132

=> einfacher geht es mit MyCadTools wie z.B. Smartproperties oder in der Bearbeitungsstation mit den Integrations- oder batchProperties-Werkzeugen.

1 „Gefällt mir“

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.

im Windows Explorer

und auf SolidWorks

Ich benutze SW 23 und SW24, ich hoffe, bald in eine SW25-Version zu investieren

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.

3 „Gefällt mir“

Hallo, danke für die Antwort.

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:
image

Si le code est bien realisé, il devrait être accessible ici:
image

Serait-il possible de nous fournir le code réalisé ?

Vielen Dank für die Unterlagen.

Ich habe versucht, das Erstellen VB.NET Add-Ins für SOLIDWORKS mithilfe der API zu wiederholen, aber ich habe nur SolidWorks, das geöffnet ist, wenn ich den Code ohne Hello World starte, und das Add-In ist nicht im Add-In-Menü vorhanden.

Bonjour;

Extrait de l'aide Solidworks:

Was muss das Add-In tun?

Die Add-In-DLL muss als COM-Server erstellt werden und folgende Anforderungen erfüllen:

  1. Implementieren Sie ein gemeinsam erstellbares Objekt, das SwAddin unterstützt.
  2. Während der Installation rufen Sie Folgendes auf:

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.
  1. Definieren Sie Ereignishandler nach Bedarf.

In der Implementierung von ISwAddin::ConnectToSW kann das Add-In:

  1. 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.
  2. Rufen Sie ISldWorks::AddMenuItem3 auf, und übergeben Sie die Callback-Methode, die dem Menüelement zugeordnet ist.
  3. 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.

Vor allem müssen Sie das Recht haben, die Registrierung zu ändern.

2 „Gefällt mir“

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

Hallo, danke für Ihre Antworten.

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

Hallo

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.

3 „Gefällt mir“