Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Per Makro Bemaßung in einer Skizze mit einer Globalen Variable verbinden

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Per Makro Bemaßung in einer Skizze mit einer Globalen Variable verbinden (344 mal gelesen)
Thor16
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Thor16 an!   Senden Sie eine Private Message an Thor16  Schreiben Sie einen Gästebucheintrag für Thor16

Beiträge: 11
Registriert: 27.08.2019

SolidWorks 2019
Windows 10 x64

erstellt am: 27. Aug. 2019 14:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

wir haben vor kurzem auf Arbeit als 3D CAD-System SolidWorks eingeführt. Seitdem hat mir das Forum schon bei der Lösung einiger Probleme weitergeholfen. Derzeit arbeite ich mich etwas in die Makroerstellung ein. Was soweit auch ganz gut funktioniert. Jetzt bin ich aber an einen Punkt angekommen, wo ich bisher noch keine Lösung gefunden habe.
Ich erstelle über ein Makro eine Skizze in welcher ein Kreis erzeugt wird. Bis hier funktioniert alles problemlos. Jetzt möchte ich die Durchmesserbemaßung des Kreises mit einer vorhandenen Globalen Variable verknüpfen. Das funktioniert aber leider nicht.
Bisher habe ich es nur geschafft die Variable zu finden und den Wert der Variable an die Bemaßung zu übergeben. Damit ändert sich aber die Bemaßung nicht, wenn ich die Globale Variable ändere. Wie kann ich mit einem Makro den Namen der Globalen Variable an die Bemaßung übergeben?

Danke und viele Grüße
Thor16

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HenryV
Mitglied
Konstrukteur, Engineering


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 684
Registriert: 18.05.2005

SolidWorks 2018 x64 SP4.0
Dell T3600 Workstation
Intel XENON 6x3.2 GHz
NVIDIA Quadro 4000 2 GB
16GB RAM
2x Dell U2412M, 24" TFT
Windows 7 Professional x64 SP1
Microsoft Office Pro 2010 SP2
Kaspersky Anti-Virus 10.2.4.674
Microsoft VB 2010 Express
SpacePilot von 3Dconnexion

erstellt am: 28. Aug. 2019 12:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Thor16 10 Unities + Antwort hilfreich

Gemäss Beispiel Add and Modify Equations Example (VBA
Code:
Sub main()
    Dim swApp           As SldWorks.SldWorks
    Dim swModel         As SldWorks.ModelDoc2
    Dim swEquationMgr   As SldWorks.EquationMgr
    Dim longEquation    As Long
   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swEquationMgr = swModel.GetEquationMgr
    'Debug.Print swModel.GetConfigurationCount
    If swModel.GetConfigurationCount = 1 Then
        longEquation = swEquationMgr.Add2(-1, """D1@Skizze1"" = ""NewDiameter""", True)
    Else
        longEquation = swEquationMgr.Add3(-1, """D1@Skizze1"" = ""NewDiameter""", True, swAllConfiguration, Empty)
    End If
End Sub

[Diese Nachricht wurde von HenryV am 28. Aug. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thor16
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Thor16 an!   Senden Sie eine Private Message an Thor16  Schreiben Sie einen Gästebucheintrag für Thor16

Beiträge: 11
Registriert: 27.08.2019

SolidWorks 2019
Windows 10 x64

erstellt am: 28. Aug. 2019 14:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo HenryV,

vielen Dank, das hat mir schon mal ordentlich weiter geholfen! 

Allerdings habe ich noch ein kleines Problem. Über eine Abfrage bekomme ich den Namen der Globalen Variable, als String, in mein Makro. Wie kann ich jetzt "NewDiameter" mit diese Variable tauschen? Wenn ich "NewDiameter" herauslösche und dafür meine Stringvariable eintrage kommt immer eine Fehlermeldung.

Code:
longEquation = swEquationMgr.Add2(-1, """D1@Skizze1"" = ""NewDiameter""", True)

ändern in

longEquation = swEquationMgr.Add2(-1, """D1@Skizze1"" = "Name_GlobVar"", True)

Wie muss ich den Code anpassen das es funktioniert?

Vielen Dank und viele Grüße

Thor16

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HenryV
Mitglied
Konstrukteur, Engineering


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 684
Registriert: 18.05.2005

SolidWorks 2018 x64 SP4.0
Dell T3600 Workstation
Intel XENON 6x3.2 GHz
NVIDIA Quadro 4000 2 GB
16GB RAM
2x Dell U2412M, 24" TFT
Windows 7 Professional x64 SP1
Microsoft Office Pro 2010 SP2
Kaspersky Anti-Virus 10.2.4.674
Microsoft VB 2010 Express
SpacePilot von 3Dconnexion

erstellt am: 28. Aug. 2019 15:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Thor16 10 Unities + Antwort hilfreich

Code:
longEquation = swEquationMgr.Add2(-1, """D1@Skizze1"" = """ & Name_GlobVar & """", True)

------------------
21 ist nur die halbe Antwort.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thor16
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Thor16 an!   Senden Sie eine Private Message an Thor16  Schreiben Sie einen Gästebucheintrag für Thor16

Beiträge: 11
Registriert: 27.08.2019

SolidWorks 2019
Windows 10 x64

erstellt am: 28. Aug. 2019 15:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo HenryV,

vielen Dank für die Antwort! Da wäre ich selbs wahrscheinlich nie drauf gekommen...

Woran kann es liegen, dass es nur funktioniert wenn die Skizze geschlossen ist? Es wäre zwar kein Problem die Verknüpfung der Bemaßung mit der Globalen Variable erst am Ende des Makros zu machen, aber noch schöner wäre es während der Erstellung der ganzen Geometrie.

Gibt es eine Möglichkeit den Code noch dahingehend zu ändern?

Viele Grüße
Thor16

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HenryV
Mitglied
Konstrukteur, Engineering


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 684
Registriert: 18.05.2005

SolidWorks 2018 x64 SP4.0
Dell T3600 Workstation
Intel XENON 6x3.2 GHz
NVIDIA Quadro 4000 2 GB
16GB RAM
2x Dell U2412M, 24" TFT
Windows 7 Professional x64 SP1
Microsoft Office Pro 2010 SP2
Kaspersky Anti-Virus 10.2.4.674
Microsoft VB 2010 Express
SpacePilot von 3Dconnexion

erstellt am: 28. Aug. 2019 16:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Thor16 10 Unities + Antwort hilfreich

Also bei mir läuft das Makro auch wenn die Skizze1 in Bearbeitung ist.

------------------
21 ist nur die halbe Antwort.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thor16
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Thor16 an!   Senden Sie eine Private Message an Thor16  Schreiben Sie einen Gästebucheintrag für Thor16

Beiträge: 11
Registriert: 27.08.2019

SolidWorks 2019
Windows 10 x64

erstellt am: 29. Aug. 2019 06:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo HenryV,

komischerweise läuft es bei mir heute Morgen auch innerhalb der Skizze.     Dafür bekomme ich jetzt eine Fehlermeldung bei dem Code nach Else. Der Fehlercode lautet "Fehler beim Kompilieren: Argument ist nicht optional"

Code:
Sub main()
    Dim swApp          As SldWorks.SldWorks
    Dim swModel        As SldWorks.ModelDoc2
    Dim swEquationMgr  As SldWorks.EquationMgr
    Dim longEquation    As Long
    Dim Name_GlV    As String
    Dim Name_GlobVar    As String
   
  
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swEquationMgr = swModel.GetEquationMgr
    'Debug.Print swModel.GetConfigurationCount
   
    Name_GlV = "Breite"
   
    If swModel.GetConfigurationCount = 1 Then
        longEquation = swEquationMgr.Add2(-1, """D1@Skizze1"" = """ & Name_GlV & """", True)
    Else
       longEquation = swEquationMgr.Add3(1, """D1@Skizze1"" = """ & Name_GlV & """", swAllConfiguration, Empty)
    End If
End Sub

Wenn ich diese Zeile auskommentiere läuft das Makro durch. Woran kann das liegen?

*Edit: Kann man auch "D1@Skizze1" mit einer Variable ersetzen? Wenn ich folgendes eintrage

Code:
longEquation = swEquationMgr.Add2(-1, """ & Name_Skizze &"" = """ & Name_GlV & """", True)

wird eine neue Globale Variable mit dem Namen "& Name_Skizze &" erstellt.

Viele Grüße
Thor16

[Diese Nachricht wurde von Thor16 am 29. Aug. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lunik
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Lunik an!   Senden Sie eine Private Message an Lunik  Schreiben Sie einen Gästebucheintrag für Lunik

Beiträge: 42
Registriert: 05.07.2017

Hardware
-Intel Xeon W2123
-Nvidia Quadro P2000
-32GB RAM
---------------------
Software
-Windows 10 Professional 64bit
-SolidWorks 2018 SP5.0
-Office 2010
---------------------
Sonstiges
-SpaceMousePro Wireless
-CadMouse Wireless

erstellt am: 29. Aug. 2019 08:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Thor16 10 Unities + Antwort hilfreich

Guten Morgen,
auf die schnelle versuch es mal so:

longEquation = swEquationMgr.Add2(-1, "" & Name_Skizze & " = " & Name_GlV & "", True)

Damit sollten die Variabeln eingesetzt werden, aktuell hattest du zu viele " womit die Variabelnamen als Text eingesetzt wurden.

------------------
Grüße Lukas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thor16
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Thor16 an!   Senden Sie eine Private Message an Thor16  Schreiben Sie einen Gästebucheintrag für Thor16

Beiträge: 11
Registriert: 27.08.2019

SolidWorks 2019
Windows 10 x64

erstellt am: 29. Aug. 2019 09:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Lukas,

vielen Dank für deine Antwort. Leider funktioniert es bei mir nicht. Das Makro läuft ganz normal durch, ohne dass irgendetwas in der Skizze oder bei den Gleichungen passiert. 

Woran kann das liegen?

Viele Grüße
Torsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2215
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

erstellt am: 29. Aug. 2019 11:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Thor16 10 Unities + Antwort hilfreich

Hallo Torsten,

ach ja, die wunderbare Welt der Gänsefüßchen beim Zusammenbauen von Strings  .
Ich denke mal es fehlen einmal Gänsefüßchen am Anfang, dass vor dem Bemaßungsausdruck auch nochmal welche stehen, da diese wahrscheinlich nicht mit der Variable kommen.

Code:
longEquation = swEquationMgr.Add2(-1, """ & Name_Skizze &"" = """ & Name_GlV & """", True)

wird zu

Code:
longEquation = swEquationMgr.Add2(-1, """" & Name_Skizze &"" = """ & Name_GlV & """", True)

am besten kannst du sowas testen wenn du deine gewünschte Eingabe mal mit Debug.Print ins Überwachungsfenster schreiben lässt, natürlich sollten die Variablen zu diesem Zeitpunkt schon belegt sein.

Code:
Debug.Print """" & Name_Skizze &"" = """ & Name_GlV & """"

Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lunik
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Lunik an!   Senden Sie eine Private Message an Lunik  Schreiben Sie einen Gästebucheintrag für Lunik

Beiträge: 42
Registriert: 05.07.2017

Hardware
-Intel Xeon W2123
-Nvidia Quadro P2000
-32GB RAM
---------------------
Software
-Windows 10 Professional 64bit
-SolidWorks 2018 SP5.0
-Office 2010
---------------------
Sonstiges
-SpaceMousePro Wireless
-CadMouse Wireless

erstellt am: 29. Aug. 2019 11:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Thor16 10 Unities + Antwort hilfreich

Hallo zusammen,
habe das ganze jetzt auch mal ausprobiert. Mit diesem Code funktioniert es so wie du es gerne hättest (wenn ich dich richtig verstanden habe), allerdings nur wenn man mehr als eine Konfiguration im Teil hat:

Code:
Sub main()

    Dim SwApp           As SldWorks.SldWorks
    Dim Part            As SldWorks.ModelDoc2
    Dim swEquationMgr   As SldWorks.EquationMgr
    Dim longEquation    As Long
    Dim Wert        As String

 

    Set SwApp = Application.SldWorks
    Set Part = SwApp.ActiveDoc

    Set swEquationMgr = Part.GetEquationMgr
    If swEquationMgr Is Nothing Then ErrorMsg SwApp, "Failed to get the equation manager"
   

    'Add a global variable assignment at index, 0, to all configurations
    longEquation = swEquationMgr.Add3(0, """Durchmesser"" = 15mm", True, swAllConfiguration, Empty)
    If longEquation <> 0 Then ErrorMsg SwApp, "Failed to add a global variable assignment"
  
    Skizzenname = """" & "D" & "1" & "@" & "Skizze1" & """"
    Variable = " = ""Durchmesser"""
    Wert = Skizzenname & Variable
   
    Debug.Print Wert

    'Add a dimension equation at index, 1, to all configurations
    longEquation = swEquationMgr.Add3(1, Wert, True, swAllConfiguration, Empty)
    If longEquation <> 1 Then ErrorMsg SwApp, "Failed to add a dimension equation"
  

    'Modify dimension equation at index, 1, in all configurations
    'longEquation = swEquationMgr.SetEquationAndConfigurationOption(1, """D1@Skizze1"" = Durchmesser", swAllConfiguration, Empty)
    'If longEquation <> 1 Then ErrorMsg SwApp, "Failed to modify a dimension equation"
  

End Sub

Function ErrorMsg(SwApp As Object, Message As String)
    SwApp.SendMsgToUser2 Message, 0, 0
    SwApp.RecordLine "'*** WARNING - General"
    SwApp.RecordLine "'*** " & Message
    SwApp.RecordLine ""
End Function


Ich dachte dann ich ersetze das swAllConfiguration durch swThisConfiguration um den Code für die aktuelle Konfiguration und auch den Code für Teile mit nur einer Konfiguration zu nutzen, was allerdings nicht auf die schnelle funktioniert hat. Hier nochmal als Code:

Code:
    longEquation = swEquationMgr.Add3(1, Wert, True, swAllConfiguration, Empty)

zu
Code:
    longEquation = swEquationMgr.Add3(1, Wert, True, swThisConfiguration, Empty)


Hoffe trotzdem ich konnte dir weiterhelfen, vielleicht findet ja sonst noch jemand eine Lösung zu dem Konfigurationsporblem.

------------------
Grüße Lukas

[Diese Nachricht wurde von Lunik am 29. Aug. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thor16
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Thor16 an!   Senden Sie eine Private Message an Thor16  Schreiben Sie einen Gästebucheintrag für Thor16

Beiträge: 11
Registriert: 27.08.2019

SolidWorks 2019
Windows 10 x64

erstellt am: 29. Aug. 2019 12:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo an alle Helfer,

vielen Dank für die Hilfe jetzt funktioniert es genauso wie ich es wollte  

Hier noch einmal die finale Version

Code:
Sub main()
    Dim swApp          As SldWorks.SldWorks
    Dim swModel        As SldWorks.ModelDoc2
    Dim swEquationMgr  As SldWorks.EquationMgr
    Dim longEquation    As Long
    Dim Name_GlV    As String
    Dim Name_Skizze As String
    Dim Name_Skizze_mG    As String
      
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swEquationMgr = swModel.GetEquationMgr
    'Debug.Print swModel.GetConfigurationCount
   
    Name_GlV = "Breite"
   
    Name_Skizze = "D1@Skizze1"
   
    'MsgBox Name_Skizze
Debug.Print """" & Name_Skizze &"" = """ & Name_GlV & """"
   
    If swModel.GetConfigurationCount = 1 Then
        longEquation = swEquationMgr.Add2(-1, """" & Name_Skizze & """ = """ & Name_GlV & """", True)
    Else
       'longEquation = swEquationMgr.Add3(1, "" & Name_Skizze & " = " & Name_GlV & "", swAllConfiguration, Empty)
    End If
End Sub

Viele Grüße
Torsten

[Diese Nachricht wurde von Thor16 am 29. Aug. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz