Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Makro mit einer anderen Makro starten!!

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
SolidCAM Professor Videos | Tipps & Tricks (SolidCAM)
Autor Thema:  Makro mit einer anderen Makro starten!! (3696 / mal gelesen)
EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 24. Jan. 2018 13:34    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,


ich möchte eine Makro die Eventgesteuert funktioniert und  dann eine andere Makro startet. Ich weiß, dass es ein Möglichkeit mit RunMacro2 gibt. Aber irgendwie startet er bei mir die jeweilige Makro nicht. Die Makro soll starten, wenn das Material geändert wird.

Mein Problem besteht darin dass ich erstmal nicht weiß welches Event ich dafür auswählen kann und das zweite Problem ist, dass ich es gerade versuche beim Fenster wechsel zu starten es aber auch nicht klappt. Er geht soweit in die Procedur hinein aber irgendwie passiert nichts. Ich bin kein VB experte deswegen ist es bestimmt nicht schön wie es geschrieben habe. Ich wäre für jede Hilfe dankbar 

________________________________________
Option Explicit

Dim eventListener As Klasse1


Sub main():
   
    Set eventListener = New Klasse1
   
End Sub
________________________________________

Option Explicit
Dim runMacroError As Long
Private WithEvents swApp As SldWorks.SldWorks
Private WithEvents swPart As SldWorks.PartDoc
Dim boolstatus As Boolean

Private Sub Class_Initialize()
  Dim boolstatus As Boolean
  Set swApp = Application.SldWorks
  '*Set swPart = Application.SldWorks
  swApp.SendMsgToUser boolstatus
End Sub
Sub RunMyMacro()
    Set swApp = Application.SldWorks
    Dim runMacroError As Long
    boolstatus = swApp.RunMacro2("Makro_Name", "RunMacro", "main", swRunMacroUnloadAfterRun, runMacroError)
   
    End Sub

Private Function swApp_ActiveDocChangeNotify() As Long
 
Call RunMyMacro
swApp.SendMsgToUser "RunMyMacro"

End Function

soll die Makro: Makro_Name starten.

Vielen Dank schon mal!!

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 24. Jan. 2018 16:47    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

Kann mir vielleicht jemand was zu RunMacro2 sagen? Da wird immer ein Wert übergeben der False beträgt. Das kann doch nicht richtig sein oder? 

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

ckoring
Mitglied
Ingenieur


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

Beiträge: 229
Registriert: 09.06.2009

Fujitsu CELSIUS M740
Intel Xeon E5-1620v4
32 GB RAM
Nvidia Quadro P4000
Windows 10 Pro
SolidWorks 2017 SP4.1
DBWorks R16 SP1.7

erstellt am: 25. Jan. 2018 07:34    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 EdKa 10 Unities + Antwort hilfreich

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 25. Jan. 2018 07:40    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 EdKa 10 Unities + Antwort hilfreich


swappeventnofifys.png

 
Hall EdKa,

der Rückgabewert von "runMacroError" sollt dir hier doch genauere Auskunft geben was hier das Problem ist.

In der API-Hilfe unter swAppNotify_e Enumeration findest du alle Notifications zu swApp, alternativ auch in deinem Klassenmodul wenn du in einer swApp_... Funktion drin bist, oben rechts in der Liste (siehe Bild).

Kleiner Tip: Um deinen Code hier besser lesen zu können würde ich dir empfehlen auch zu kennzeichnen was in welchem Modul steht z.B.

Code:
'Standarmodul: notifcations1
Option Explicit

Public MyClass As New Notification_Class

Sub main()
    MyClass.MonitorSolidWorks
End Sub


Code:
'Klassenmodul: Notification_Class
Option Explicit

Dim WithEvents swApp        As SldWorks.SldWorks
Dim WithEvents MyPart      As SldWorks.PartDoc
Dim WithEvents MyAssembly  As SldWorks.AssemblyDoc
Dim WithEvents MyDrawing    As SldWorks.DrawingDoc

Public boolstatus          As Boolean

Public Sub MonitorSolidWorks()
    Set swApp = Application.SldWorks
End Sub

Private Function swApp_ActiveDocChangeNotify() As Long
   
    If swApp.ActiveDoc.GetType = swDocPART Then
        Set MyPart = Nothing
        Set MyPart = swApp.ActiveDoc
    ElseIf swApp.ActiveDoc.GetType = swDocASSEMBLY Then
        Set MyAssembly = Nothing
        Set MyAssembly = swApp.ActiveDoc
    ElseIf swApp.ActiveDoc.GetType = swDocDRAWING Then
        Set MyDrawing = Nothing
        Set MyDrawing = swApp.ActiveDoc
    Else
        Set MyPart = Nothing
        Set MyAssembly = Nothing
        Set MyDrawing = Nothing
    End If

Debug.Print swApp.ActiveDoc.GetType

End Function



Gruß
Bernd


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

Staatlich anerkannte Deutschniete  

[Diese Nachricht wurde von bk.sc am 25. Jan. 2018 editiert.]

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 25. Jan. 2018 12: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

Vielen Dank für eure Hilfe. Ich habe leider sehr wenig VBA Erfahrung. Soweit läuft das jetzt wenn ich das Fenster wechsel und es ein Teil ist. Jetzt wollte ich einige Bedingungen vorgeben aber irgendwie scheitere ich schon daran wenn ich in die Private Sub Class_Initialize() diese Deklaration mache.

So sieht das ganze bei mir jetzt aus.

'*Standard-Modul:Event3

Option Explicit

Dim eventListener As Klasse1


Sub main():
   
    Set eventListener = New Klasse1
   
End Sub
------------------


'*Klassenmodul: Klasse1

Option Explicit
Dim runMacroError As Long
Private WithEvents swApp As SldWorks.SldWorks
'*Private WithEvents swPart As SldWorks.PartDoc


Dim boolstatus As Boolean

Private Sub Class_Initialize()
  Dim SwModel As SldWorks.ModelDoc2
  Dim swPart As SldWorks.PartDoc
  Dim boolstatus As Boolean
 
 
  Set swApp = Application.SldWorks
  Set SwModel = swApp.ActivateDoc <--- wird das hinzugefügt dann erscheint ein Fehler: Argument ist nicht optional
 
  swApp.SendMsgToUser "erste Procedure läuft"
 
End Sub

Sub RunMyMacro()
    Set swApp = Application.SldWorks
    Dim runMacroError As Long
    boolstatus = swApp.RunMacro2(Makroname, Modulname, "main", swRunMacroUnloadAfterRun, runMacroError)
    swApp.SendMsgToUser boolstatus
    End Sub

Private Function swApp_ActiveDocChangeNotify() As Long
Call RunMyMacro
swApp.SendMsgToUser runMacroError

End Function
             


Private Function swPart_ActiveConfigChangeNotify() As Long
Call RunMyMacro
End Function
-----------------

Es ist bestimmt ganz simpel der Fehler aber ich weiß gerade nicht weiter.  

Danke im Voraus

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 25. Jan. 2018 12:29    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 EdKa 10 Unities + Antwort hilfreich

Hallo,

ich glaube ActivateDoc sollte ActiveDoc heißen, weil ActivateDoc braucht Paramter zum arbeit u.a. den Namen des Dokumentes. 

Des Weitern kommentierst du hier

Code:
'*Private WithEvents swPart As SldWorks.PartDoc

aus, möchtest hier
Code:
Private Function swPart_ActiveConfigChangeNotify() As Long

aber darauf zugreiffen was wohl nicht funktionieren wird.

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 25. Jan. 2018 17:16    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

Haha ok das stimmt der Fehler lag an der Schreibweise. ActivateDoc sollte ActiveDoc heißen. Vielen Dank schon mal für den Tipp.
Jetzt bin ich auch schon viele Schritte weiter aber meine Eventgesteuerte Makro ist gerade so Programmiert, dass die Makro startet, wenn ich ein Fensterwechsel durchführe. Ich möchte aber dass diese gestartet wird wenn ich das Material ändere   . Ich finde gerade nicht die richtige Aktion :/.
Könnte mir da jemand Helfen  ?


Vielen Dank schon mal

[Diese Nachricht wurde von EdKa am 25. Jan. 2018 editiert.]

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 26. Jan. 2018 11:48    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


So sieht mein Code jetzt aus. Funktioniert auch soweit! Nur möchte ich jetzt nicht dass die Makro beim Fensterwechsel aufgerufen wirdd sondern wenn ich entweder das Fenster aktualisiere (STRG+Q) oder wenn ich ein anderes Material im Featurebaum auswähle.

----------------------------
'*Standard-Modul:Event3

Option Explicit

Dim eventListener As Klasse1


Sub main():
   
    Set eventListener = New Klasse1
   
End Sub
-------------------------------

'*Klassenmodul: Klasse1

Option Explicit
Dim runMacroError As Long
Private WithEvents swApp As SldWorks.SldWorks
Private WithEvents swPart As SldWorks.PartDoc


Dim boolstatus As Boolean

Private Sub Class_Initialize()
   Dim SwModel As SldWorks.ModelDoc2
   Dim swPart As SldWorks.PartDoc
   Dim boolstatus As Boolean
  
  
   Set swApp = Application.SldWorks
   Set SwModel = swApp.ActiveDoc
  
   swApp.SendMsgToUser "erste Procedure läuft"
  
End Sub

Sub RunMyMacro()
     Set swApp = Application.SldWorks
     Dim runMacroError As Long
     boolstatus = swApp.RunMacro2("Makronamen", "Makroname1", "main", swRunMacroUnloadAfterRun, runMacroError)
     swApp.SendMsgToUser boolstatus
    End Sub

Private Function swApp_ActiveDocChangeNotify() As Long
   Dim SwModel As SldWorks.ModelDoc2
   Dim swPart As SldWorks.PartDoc
   Dim boolstatus As Boolean
   
 
  Set swApp = Application.SldWorks
  Set SwModel = swApp.ActiveDoc
 
 
  If SwModel.GetType <> swDocPART Then
    MsgBox "Kein Teil geöffnet Arsch!", vbOKOnly, "Fehler"
    GoTo EXITHERE
  Else
  Call RunMyMacro
  '*swApp.SendMsgToUser runMacroError
  End If
EXITHERE:

End Function


-------------------------

Vielen Dank im Voraus

[Diese Nachricht wurde von EdKa am 26. Jan. 2018 editiert.]

[Diese Nachricht wurde von EdKa am 26. Jan. 2018 editiert.]

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3189
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 26. Jan. 2018 15:18    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 EdKa 10 Unities + Antwort hilfreich

Hallo,

für mich sieht  das hier nach einer Liste der möglichen Events aus. (Eventhandler, unten bei "Delegates").
zu material hab ich da aber nichts gesehen.

Gruß, Christian

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 29. Jan. 2018 08: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

Vielen Dank aber diese Liste habe ich auch schon gesehen aber damit komme ich irgendwie gerade nicht weiter. Bernd kannst du mir da vielleicht noch einen Tipp geben?

Vielen Dank im Voraus

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 29. Jan. 2018 09: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 EdKa 10 Unities + Antwort hilfreich

Hallo,

für das Ändern von Material habe ich auch kein eigenes Event gefunden, ich würde es aber wohl wiefolgt lösen:

1. beim swApp_ActiveDocChangeNotify Event prüfen ob es sich um ein PartDoc handelt
2. wenn PartDoc Konfiguration ermitteln (nur nötig wenn mit Konfigurationen mit unterschiedlichem Materialien gearbeitet wird)
3. und Material (Startmaterial) ermitteln (wahrscheinlich über die dazugehörige Eigenschaft)
4. beim PartDoc_RegenPostNotify2 Material (Istmaterial) ermitteln
5. Vergleich Startmaterial und Istmaterial
6. wenn unterschiedlich dann extra Macro starten
7. im MyPart_ConfigurationChangeNotify Startmatrial überschreiben (nur nötig wenn mit Konfigurationen mit unterschiedlichem Materialien gearbeitet wird)
8. evtl. noch beim MyPart_FileSaveNotify Event den Vergleich wie oben durchführen

Gruß
Bernd

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

Staatlich anerkannte Deutschniete  

[Diese Nachricht wurde von bk.sc am 29. Jan. 2018 editiert.]

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 29. Jan. 2018 13:41    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

[Ok Danke für die Tipps.Es läuft jetzt soweit. Aber ich bin immer noch mit dem Event unzufrieden. Für mich wäre es auch i.O. wenn das Event startet wenn ich das Fenster aktualisiere (STRG+Q). Kannst du oder irgend jemand mir da vielleicht was genaues sagen. Ich denke das Event habe ich soweit gefunden. Siehe Link: [http://help.solidworks.com/2017/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.DPartDocEvents_FileReloadNotifyEventHandler.html] 

Aber irgendwie wie wird das Event nicht gestartet wenn ich das Model aktualisiere   

Vielen Dank schon mal

[Diese Nachricht wurde von EdKa am 29. Jan. 2018 editiert.]

[Diese Nachricht wurde von EdKa am 29. Jan. 2018 editiert.]

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3189
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 29. Jan. 2018 15:30    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 EdKa 10 Unities + Antwort hilfreich

Zitat:
...
4. beim PartDoc_RegenPostNotify2 Material (Istmaterial) ermitteln
5. Vergleich Startmaterial und Istmaterial
6. wenn unterschiedlich dann extra Macro starten

Hallo EdKa,

sehr schöne Auflistung von Bernd 

was passiert eigentlich, wenn das extra Macro ein "Regen" auslöst?
möglicherweise sollte dann Startmaterial und Istmaterial nicht mehr unterschiedlich sein ...

nur so ein Gedanke.

und der 2. Gedanke:
warum sollte file-reload beim rebuild ausgelöst werden?

Gruß, Christian

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 29. Jan. 2018 15:45    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 Christian,

ich beziehe das IstMaterial mit SwModel.GetMaterialPropertyName2("Default", sMatDB), weiß deswegen nicht genau was du meinst mit "Regen" meinst (Sry Anfänger  ) Meine Idee ist es entweder beim Abspeichern oder beim aktualisieren des Models die Externe Makro zu starten. Bedeutet ich drücke auf (STRG+S) und dann wird das Event gestartet und meine externe Makro wird aufgerufen um was in die Dokumenteigenschaften einzufügen oder wenn ich (STRG+Q) drücke dann wird das jeweilige Event gestartet.

Danke schon mal im Vorraus

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 29. Jan. 2018 15:53    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 EdKa 10 Unities + Antwort hilfreich

Hallo,

das PartDoc_RegenPostNotify2 Event reagiert auf jegliche Art von Neuaufbau u.a. Strg + B und Strg + C dein Event reagiert nur auf neu Laden eines Dokumentes z.B. wenn du ein Part aus einer Baugruppe aus öffnest.

Aber wenn du nur dieses (RegenPostNotify2) Event abfängst führt er dein Macro wirklich bei jedem Neuaufbau aus (Strg + B, Strg + C, Änderung eines Features, hinzufügen eines Features usw.) was wohl ziemlich oft vorkommt.

So funktioniert es bei mir das SWX nur dann nach dem Regenerieren / Neuaufbauen was machen möchte wenn auch das Material geändert wurde (Strg + B / Strg + C oder sonstiger Neuaufbau erforderlich).

Code:
'Notification_Class (Klassen-Modul)
Option Explicit

Dim WithEvents swApp        As SldWorks.SldWorks
Dim WithEvents MyPart       As SldWorks.PartDoc

Public sStartMaterialName   As String
Public sNewMaterialName     As String
Public sMatDB               As String

Public boolstatus           As Boolean

Public Sub MonitorSolidWorks()
   
    Set swApp = Application.SldWorks

End Sub


Private Function MyPart_ActiveConfigChangePostNotify() As Long
   
    sStartMaterialName = MyPart.GetMaterialPropertyName2("", sMatDB)

End Function

Private Function MyPart_RegenPostNotify2(ByVal stopFeature As Object) As Long
   
    sNewMaterialName = MyPart.GetMaterialPropertyName2("", sMatDB)
   
    If sNewMaterialName <> sStartMaterialName Then
        Debug.Print "Do what ever you want to do"
        sStartMaterialName = sNewMaterialName
    End If
   
End Function

Private Function swApp_ActiveDocChangeNotify() As Long
   
    If swApp.ActiveDoc.GetType = swDocPART Then
        Set MyPart = Nothing
        Set MyPart = swApp.ActiveDoc
       
        sStartMaterialName = MyPart.GetMaterialPropertyName2("", sMatDB)
       
    Else
        Set MyPart = Nothing

        sStartMaterialName = ""
    End If

End Function


Gruß
Bernd

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

Staatlich anerkannte Deutschniete    

[Diese Nachricht wurde von bk.sc am 30. Jan. 2018 editiert.]

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 29. Jan. 2018 16:00    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

Vielen Dank schon mal für die Information! Also mit API-Hilfe von SW komme ich irgendwie nicht klar. Darf ich fragen, wo du diese Informationen her hast? Oder hast du die aus der API-Hilfe von Solidworks   ? Ich muss jetzt erstmal den Quellcode verarbeiten und genauer anschauen  

Vielen Dank noch mal

[Diese Nachricht wurde von EdKa am 29. Jan. 2018 editiert.]

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 29. Jan. 2018 16:18    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 EdKa 10 Unities + Antwort hilfreich

Hallo,

ich habe alle Informationen aus der API Hilfe. Wenn man länger mit Macros zu tun hat kommt man mit der API-Hilfe auch irgendwann ganz gut klar.

Hab meinen Code oben korrigiert und deine Routiene (MyPart.GetMaterialPropertyName2("", sMatDB)) für die Materialermittlug verwendet, meine war etwas unschön (hat mehr Variablen und Zeilen benötigt), diese ist mir aber halt zuerst über den Weg gelaufen beim suchen in der API-Hilfe, daher hatte ich sie auch verwendet.   

[EDIT]Das FileOpenPostNotify Event kann eigentlich auch entfallen (habe es oben raus editiert), dies wäre nur interesant wenn du über API öffnest bzw. im Hintergrund öffnest, aber du machst das ja aktiv.

Der Einwand von Christian sollte aber auch mal überprüft werden.

Zitat:
was passiert eigentlich, wenn das extra Macro ein "Regen" auslöst?

Weil hier könnte im ungünstigsten Fall vielleicht eine Endlosschleife enstehen.

Gruß
Bernd

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

Staatlich anerkannte Deutschniete   

[Diese Nachricht wurde von bk.sc am 29. Jan. 2018 editiert.]

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 29. Jan. 2018 17: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

Haha ich dachte nicht, dass man was von meinem Code übernehmen kann aber das freut mich um so mehr   . Aber irgenwie passiert bei mir nichts wenn ich mit dem Event Private Function swPart_ActiveConfigChangePostNotify() As Long arbeite   . Ich verstehe das nicht  


'*Klassenmodul: Klasse1

Option Explicit
Dim runMacroError As Long
Private WithEvents swApp As SldWorks.SldWorks
Private WithEvents swPart As SldWorks.PartDoc
Private WithEvents swDrawing As SldWorks.DrawingDoc

Public FeatureName As String
Public FeatureTyp As String
Public IstMaterial As String
Public NeuMaterial As String
Public boolstatus As Boolean
Public sMatDB      As String

Private Sub Class_Initialize()
   Dim SwModel As SldWorks.ModelDoc2
   Dim swPart As SldWorks.PartDoc
   Dim boolstatus As Boolean
  
  
   Set swApp = Application.SldWorks
   Set SwModel = swApp.ActiveDoc
  
   swApp.SendMsgToUser "erste Procedure läuft"
  
End Sub

Sub RunMyMacro()
     Set swApp = Application.SldWorks
     Dim runMacroError As Long
     boolstatus = swApp.RunMacro2("MeineMakro", "MeineMakro1", "main", swRunMacroUnloadAfterRun, runMacroError)
     swApp.SendMsgToUser boolstatus
    End Sub
Sub preSave(sFileName As String)
    MsgBox sFileName & " is about to be saved!"
End Sub


Private Function swApp_ActiveDocChangeNotify() As Long
   Dim SwModel As SldWorks.ModelDoc2
   Dim swPart As SldWorks.PartDoc
   Dim swDrawing As SldWorks.DrawingDoc
   Dim Feature As Feature
   '*Dim FeatureName As String
   '*Dim FeatureTyp As String
   '*Dim IstMaterial As String
   '*Dim sMatDB      As String
   Dim FilePath As String
  
  
  Set swApp = Application.SldWorks
  Set SwModel = swApp.ActiveDoc
  FilePath = SwModel.GetPathName
  MsgBox FilePath
  '*Set swDrawing = SwModel.ActiveView
 
  '*Erstes Feature ermitteln
   
 
  If SwModel.GetType = swDocPART Then
      Set swPart = SwModel
      Set Feature = swPart.FirstFeature
     
    Do While Not Feature Is Nothing
   
    FeatureName = Feature.Name
    FeatureTyp = Feature.GetTypeName
   
    Debug.Print Feature.Name & "(" & FeatureTyp & ")"
    Set Feature = Feature.GetNextFeature
    IstMaterial = SwModel.GetMaterialPropertyName2("Default", sMatDB)
        If IstMaterial = FeatureName Then
            Call RunMyMacro
            Exit Do
        End If
    Loop
    GoTo EXITHERE:
           
     
    '*ElseIf SwModel.GetType = swDocDRAWING Then
      '*Set swPart = SwModel
      '*Set swDrawing = swPart
      '*Set swDrawing = Nothing
      '*Set swDrawing = swApp.ActiveDoc
      '*Set Feature = SwModel.FirstFeature
    Else
      MsgBox "Kein Teil geöffnet!", vbOKOnly, "Fehler"
      GoTo EXITHERE
    End If
 
  '*Durchlaufe den Feature-Baum und schau was bei Material steht
  Do While Not Feature Is Nothing
   
    FeatureName = Feature.Name
    FeatureTyp = Feature.GetTypeName
   
    Debug.Print Feature.Name & "(" & FeatureTyp & ")"
    Set Feature = Feature.GetNextFeature
   
        If IstMaterial = FeatureName Then
            Call RunMyMacro
            Exit Do
        End If
  Loop
  '*End If
  GoTo EXITHERE:
 
  swApp.SendMsgToUser runMacroError
   

EXITHERE:

End Function
              

Private Function swPart_ActiveConfigChangePostNotify() As Long

NeuMaterial = SwModel.GetMaterialPropertyName2("Default", sMatDB)

If NeuMaterial <> IstMaterial Then
MsgBox IstMaterial
End If



End Function


So sieht mein Code jetzt aus. Ist noch vieles auskommentiert aber einfach nicht beachten :P
Ich wollte jetzt auch nur kurz schauen ob was beim aktualisieren des Fensters passiert aber es passiert leider nichts :/

Vielen Dank schon mal

[Diese Nachricht wurde von EdKa am 29. Jan. 2018 editiert.]

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 30. Jan. 2018 07:20    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 EdKa 10 Unities + Antwort hilfreich

Hallo,

das Event swPart_ActiveConfigChangePostNotify reagiert nur auf Konfigurationswechsel also wenn du die aktive Konfiguration umschaltest. Setzte in deinem Macro doch mal einen Haltepunkt in diese Funktion und schau ob er da auch wirklich reinspringt und dann mit F8 im Einzelschrittmodus weiter, weil wenn die Materialien in beiden Konfigurationen gleich sind sollte in deinem Fall auch nichts passieren.

Des Weiterem verstehe ich nicht was du mit deiner Feature Schleife vorhast.

Ich würde dir auch empfehlen ein Paar debug.print einzubauen an statt mit MsgBox zu arbeiten, damit kannst du meines Erachtens denn Macroablauf besser nachverfolgen, vor allem wann SWX welches Event triggert.

Eine Weitere Frage, hast du mein Macro einfach mal probiert? Also meinen Code um deine Sub RunMyMacro erweitern und entsprechend das Debug.Print "Do what ever you want to do" in meinem Code durch Call RunMyMacro ersetzten.

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 30. Jan. 2018 07:40    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

Also so langsam aber sicher bin ich mit meinem Latein am Ende Ich verstehe nicht, warum bei mir das Event nicht ausgelöst wird. Bis jetzt passiert nur bei einem Fensterwechsel was. Aber beim aktualisieren oder speichern der Datei passiert nichts.

Ich verstehe doch richtig, dass das Event startet, wenn ich das Fenster mit STRG+Q oder STRG+B aktualisiere oder wo ist mein Denkfehler??

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 30. Jan. 2018 07:56    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

Zitat:
das Event swPart_ActiveConfigChangePostNotify reagiert nur auf Konfigurationswechsel also wenn du die aktive Konfiguration umschaltest.

Ok ja das habe ich auch bei mir nicht angewendet, da wir kaum mit Konfigurationen arbeiten.

Zitat:
Des Weiterem verstehe ich nicht was du mit deiner Feature Schleife vorhast.

Also damit gehe ich durch den Strukturbaum und wenn ich im Strukturbaum Bei Material den Materialnamen der dort steht gleich dem istMaterial dann startet er meine Makro. In der Makro schreibe ich ich dann in die Dateieigenschaften die Wekstoffsachnummer rein die ich dem je nach Material vorgegeben habe.

Zur Zeit ist es so, dass wir jedes mal wenn wir ein Teil erstellt haben immer ein Macrobutton drücken damit er die Werkstoffsachnummer übernimmt. Ich möchte, dass wir einmal auf das Button drücken und er die ganze Zeit dann dies im Hintergrund macht wenn z.B. man STRG+S drückt oder STRG+Q drückst und nicht wie jetzt, dass er das bei einem Fensterwechsel tut.

Zitat:

Eine Weitere Frage, hast du mein Macro einfach mal probiert? Also meinen Code um deine Sub RunMyMacro erweitern und entsprechend das Debug.Print "Do what ever you want to do" in meinem Code durch Call RunMyMacro ersetzten.

Ja ich habe deine Macro ausprobiert und komischerweise ist auch da nichts passiert. Ich arbeite fast nur mit Haltepunkten    . Aber wie gesagt, es passiert bei mir nichts auch nicht bei deiner Macro    Irgendwie funktioniert bei mir kein Event mit swPart 


Ich Danke dir nochmal vielmals für deine Geduld, Hilfe und Tipps.

Wäre super wenn wir das mit dem Event noch hinbekommen   

[Diese Nachricht wurde von EdKa am 30. Jan. 2018 editiert.]

[Diese Nachricht wurde von EdKa am 30. Jan. 2018 editiert.]

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 30. Jan. 2018 08:38    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 EdKa 10 Unities + Antwort hilfreich


Event_Mat-Change.swp.txt

 
Hallo,

das swPart_ActiveConfigChangePostNotify brauchst du nur wenn du mit Konfigurationen arbeitest und diese unterschiedliche Materialien haben.

Das swPart_RegenPostNotify2 Event ist das was beim Aktualisierung getriggert wird (z.B. bei Strg + B/Q).
Um auf das Speichern zu reagieren brauchst du das swPart_FileSaveNotify oder swPart_FileSaveAsNotify2 Event.

Zitat:
Also damit gehe ich durch den Strukturbaum und wenn ich im Strukturbaum Bei Material den Materialnamen der dort steht gleich dem istMaterial dann startet er meine Makro. In der Makro schreibe ich ich dann in die Dateieigenschaften die Wekstoffsachnummer rein die ich dem je nach Material vorgegeben habe.

Das verstehe ich irgenwie immernoch nicht, der FeatureName des Materials simmt doch immer mit dem IstMaterial überein, du (das Macro) musst hier doch eigentlich nur aktiv werden wenn sich das Material geändert hat?
Wenn dein anderes Macro nicht so kompliziert ist, würde ich das an deiner Stelle direkt in das EventMacro mit übernehmen, das macht die Sache wahrscheinlich einfacher.

Ich würde es auch nicht übertreiben bei jedem Event die ganze Prozedur zu durchlaufen sondern wirklich nur beim Regenerieren / Neuaufbauen und Speichern und dann beim Fensterwechsel wirklich nur das neue PartObject holen.

EDIT: Ich hab mein Macro mal angehängt (.txt weglöschen). Zu beachten ist, dass das Macro so gedacht ist das es mit SWX mitgestartet wird, daher musst du das Macro starten wenn noch kein Dokument geöffnet ist oder erst einen Fensterwechsel (Datei öffnen) durchführen. Hatte oben ein paar Schreibfehler drin die evtl. verwirrend waren.

Gruß
Bernd

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

Staatlich anerkannte Deutschniete   

[Diese Nachricht wurde von bk.sc am 30. Jan. 2018 editiert.]

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3189
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 30. Jan. 2018 09:25    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 EdKa 10 Unities + Antwort hilfreich

Zitat:
...
Code:

Private Function MyPart_RegenPostNotify2(ByVal stopFeature As Object) As Long
   
    sNewMaterialName = MyPart.GetMaterialPropertyName2("", sMatDB)
   
    If sNewMaterialName <> sStartMaterialName Then
        Debug.Print "Do what ever you want to do"
        sStartMaterialName = sNewMaterialName
    End If
   
End Function



Hallo,

zum "Regen"
du brauchst das Event "RegenPostNotify2", das wird nach dem "Regen(erate)" geworfen.
wenn jetzt dein Makro (an der Stelle "Do what ever you want...") auch einen Neuaufbau ("Regen") auslöst, wird sofort wieder das Event ausgelöst und du landest wieder in der Abfrage und wieder in deinem Makro und dann wieder und wieder ...
deshalb würd ich die beiden Zeilen dort tauschen.

und zu deiner Schleife:
du gehst durch das TEIL, fragst jedes Feature, ob es zufällig wie das quasi zur gleichen Zeit ermittelte Material heißt?
wie möchtest du da eine Änderung feststellen?

Gruß, Christian

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 30. Jan. 2018 09: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

Ok ich hatte da ganz klar einen Denkfehler  Aber gut das ich einmal mich mit dem Featurebaum beschäftigt habe  . Werde ich bestimmt noch einmal nutzen aber klar du hast recht. Die Macro soll nur gestartet werden, wenn das IstMaterial  ungleich dem neuen Material ist. Und danke für die Tipps und jetzt sogar für deine Macro. Nutzt du die eigentlich selber oder hast du die jetzt gerade ganz schnell geschrieben wegen diesem Beitrag?


Also das ist auch nur solange ich teste. Dadurch möchte ich einfach das richtige Event finden. Ich werde mal schauen ob ich es nicht beim Speichern auslöse.

Danke nochmal 

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 30. Jan. 2018 10: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 Christian,

ja das war ein echt dummer Gedanke von mir  . Aber naja aus Fehlern lernt man....hoffentlich  .

Du hast mit dem Regen recht. Also er geht immer wieder in das Event und durchläuft es paar mal. Ich habe mich jetzt auch für das Save-Event entschieden. Das passt besser zu meinem Vorhaben. Aber dank Bernd bin ich jetzt so gut wie am Zeil. Danke euch nochmal allen!!  

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 30. Jan. 2018 11:31    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 EdKa 10 Unities + Antwort hilfreich

Hallo,

Zitat:
Und danke für die Tipps und jetzt sogar für deine Macro. Nutzt du die eigentlich selber oder hast du die jetzt gerade ganz schnell geschrieben wegen diesem Beitrag?

das jetzt explitzit nicht, hatte mal ein ähnliches im Gebrauch und habe das nur etwas auf deine Anforderung umgeschrieben.

Du würdest aus der Regen Schleife raus kommen, wenn du wie Christian schon schrieb die beiden Zeilen tauscht, also erst das neue Material in die Variable eintragen und dann "What ever you want to do" bzw. dein Macro startest.

Gruß
Bernd

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

Staatlich anerkannte Deutschniete  

[Diese Nachricht wurde von bk.sc am 30. Jan. 2018 editiert.]

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 06. Feb. 2018 07:42    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,

da bin ich wieder  . Also eins verstehe ich nicht. Ich möchte wenn ich nicht erst das Fenster wechsel, dass er in die Macro geht und diese dann durchläuft sondern wenn ich einmal die Macro starte und er jedes Mal wenn ich STRG+Q drücke, diese dann durchläuft. Zur Zeit ist es ja bei dem Macro so, dass erst bei einem Fensterwechsel das ganze durchlaufen wird und dann erst aktiv ist. Ist es möglich, die Macro mit STRG-Q zu starten. Ich weiß durch Bernd, dass das Event
"Private Function MyPart_RegenPostNotify2" dafür zuständig ist. Aber dieses Event wird erst bei einem Fensterwechsel aktiv.
Wo ist mein Denkfehler? Kann ich ihm nicht sagen: Wenn das Model aktualisiert wird, soll er die Macro durchlaufen ohne davor einen Fensterwechsel zu provozieren?

Viele Grüße und vielen Dank

EdKa

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3189
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 06. Feb. 2018 09: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 EdKa 10 Unities + Antwort hilfreich

Hallo Edka,

so wie dein letzter geposteter Code aussieht, hast du alles in

Code:
Private Function swApp_ActiveDocChangeNotify() As Long

eingebaut.
dann kann es auch nur nach dem Fensterwechsel funktionieren.

Nimm dir doch mal von Bernd den ersten quellcode,
da wird beim Fensterwechsel je nach Datei myPart, myAssembly, myDrawing aktiviert.

wenn du dazu

Code:
Private Function MyPart_RegenPostNotify2(ByVal stopFeature As Object) As Long

definierst und da deinen Code einbaust, sollte es passen.

so ähnlich hatte Bernd dir auch schon einen Code hier eingestellt.

Gruß, Christian

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 06. Feb. 2018 11:23    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 EdKa 10 Unities + Antwort hilfreich

Hallo,

ich habe auch noch zusätzlich gesagt das mein Macro so gedacht ist das es mit SWX mitgestartet wird. Also wird es bei manuellem Ausführen erst beim Laden eines Dokumentes (z.B. durch Öffnen / Fensterwechsel) richtig aktiv, da erst hier ein Object für myPart gesetzt wird was überwacht wird.

Du hast also drei Möglichkeiten das Macro zu starten und auch aktiv auf dein Dokument zu setzten:
- Macro automatisch mit SWX starten
- Macro manuell starten wenn noch kein Dokument geladen ist
- Macro manuell starten und Fensterwechsel hin- und herwechseln

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 06. Feb. 2018 12:24    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 Christian,

danke für deine Antwort. Ich habe es auch so gemacht wie Bernd es auch in seiner Macro macht. Nur da ist dass ja auch soweit geregelt, dass erst bei einem Fensterwechsel geprüft wird, um welchen Typen es sich handelt. Ich möchte das Macro ohne einen Fensterwechsel starten. Das bedeutet, ich aktualisiere das Fenster und damit prüft er erstmal um welchen Typen es sich handelt und aktiviert dann das andere Macro.


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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 06. Feb. 2018 12:29    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

Ja habe dass auch nicht überlesen. Nur habe ich dass über die Verknüpfung von Solidworks--> Rechte Maustaste-->Eigenschaften--> Ausführen und dann zu dem Dateipfad noch diesen Teil mit eingetragen aber es passiert nichts....

"C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS (2)" "/m" "Dateipfad\Makro\Event_Mat-Change.swp"

oder wie startest du das Macro beim Starten?


Vielen Dank schon mal

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3189
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 06. Feb. 2018 14:21    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 EdKa 10 Unities + Antwort hilfreich

Zitat:
... ich habe auch noch zusätzlich gesagt das mein Macro so gedacht ist das es mit SWX mitgestartet wird...

Hallo Bernd,

stimmt, das hab ich übersehen, auch im Macro Verhalten. ... ;(

als weitere Möglichkeit könnte man vielleicht auch das "Initialize" erweitern, auf activedoc überprüfen und je nach fall die Eventobjekte setzen.
dann noch ggf. die erstmalige Materialfeststellung und gut ist?

Muss man eigentlich etwas beachten, wenn das Makro mehrfach gestartet wird?

Gruß, Christian

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 06. Feb. 2018 14:31    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 EdKa 10 Unities + Antwort hilfreich

Hallo,

ich glaube deine Pfadangabe ist falsch, diese müsste eher so aussehen: "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\SLDWORKS.exe" -m "Dateipfad\Makro\Event_Mat-Change.swp" bei Ziel.

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

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 06. Feb. 2018 14:39    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 EdKa 10 Unities + Antwort hilfreich

Hallo Christian,

Zitat:
als weitere Möglichkeit könnte man vielleicht auch das "Initialize" erweitern, auf activedoc überprüfen und je nach fall die Eventobjekte setzen.
dann noch ggf. die erstmalige Materialfeststellung und gut ist?

Wäre auch eine Option wenn es den unbedingt von Hand gestartet werden soll.

Zitat:
Muss man eigentlich etwas beachten, wenn das Makro mehrfach gestartet wird?

Meinst du hier mehrer Benutzer oder innerhalb einer Sitzung? Bei mehreren Benutzern hatte wir keine Problem, das Andere kann ich nicht beurteilen, weil es ja bei uns immer automatisch mitgestartet wurde.

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3189
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 06. Feb. 2018 14:54    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 EdKa 10 Unities + Antwort hilfreich

Zitat:
... Meinst du hier mehrer Benutzer oder innerhalb einer Sitzung? Bei mehreren Benutzern hatte wir keine Problem, das Andere kann ich nicht beurteilen, weil es ja bei uns immer automatisch mitgestartet wurde...

Hallo Bernd,

ich dachte an mehrfachen Start und Deklaration von "myclass as new Notification_Class"
wird damit das gleichnamige Objekt einfach nur "resetted"? oder liegen dann lauter Zombie-Objekte im Speicher?

ich hab es jetzt mal ohne new deklariert,
dann lässt es sich auf "is nothing" abfragen und man kann ein start/stop makro bauen 

und das mit dem automatischen Start werd ich mir wohl auch mal genauer ansehen ...

Danke und Gruß, Christian

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 06. Feb. 2018 15: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 Nur für EdKa 10 Unities + Antwort hilfreich

Hallo Christian,

Zitat:
ich dachte an mehrfachen Start und Deklaration von "myclass as new Notification_Class"
wird damit das gleichnamige Objekt einfach nur "resetted"? oder liegen dann lauter Zombie-Objekte im Speicher?

Damit hast du wohl recht, da hier bei jedem neuen Ausführen theoretisch eine neue Instanz des Klassenobjektes erzeugt wird, wirst du hier dann wohl lauter Zombies in den Speicher bekommen. Die Zombies machen in diesem Fall dann auch noch alle immer das gleiche wenn ein Event getriggert wird, was evtl. sogar zu problemen führen könnte.

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

EdKa
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 06.07.2017

SolidWorks 2017, PDM System: DBWorks

erstellt am: 07. Feb. 2018 07:29    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

Vielen Dank Bernd. Jetzt geht es 


Gruß EdKa

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)2024 CAD.de | Impressum | Datenschutz