Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  VBA Macro

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:   VBA Macro (1940 mal gelesen)
Student789
Mitglied


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

Beiträge: 6
Registriert: 07.05.2014

erstellt am: 07. Mai. 2014 19: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

Hallo,

ich bin neu hier und begrüße alle ganz herzlich.

Meine Kommilitonen und ich müssen im Zuge einer Projektarbeit eine Bewegungssimulation für ein Doppelpendel mit Hilfe von SolidWorks Motion erstellen.
Die Erstellung, der Zusammenbau und die Bewegungssimulation funtionieren auch sehr gut.
Außerdem sollen wir auch Macros programmieren, mit denen wir die Geometrien der Pleuel verändern können, auch das hat gut funktioniert.
Nun sollen jedoch auch per Makro die Startwinkel der Pleuel, relativ zueinander per Macro steuerbar sein, dass stellt sich jedoch als schwieriger dar.
Die Winkel, die wir per Macro vorgegeben haben werden immer als feste Beziehungen umgesetzt, so dass sich nach der Eingabe nichts mehr dreht.
Erstellt haben wir die Macros mit Hilfe des Macrorecorders in VBA mit SolidWorks2013.

1)Wie kann man diesen Fehler vermeiden?
2)Kann man die Macros auch in CPP aufnehmen?
Falls nicht,
3) Ist es möglich bei dem VBA-Macro Excel-Tabellen einzulesen?
4) Wie kann man eine .exe-Datei für das Macro erstellen?

Vielen Dank im voraus für die Hilfe

Mit freundlichen Grüßen
Student789 

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Maschinenbautechniker



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

HP Z400 Workstaion
CPU: Intel Xeon 6x 3,33GHz
GPU: NVIDEA Quadro 2000
RAM: 12 GB DDR3
Win 7 x64
CAD Hauptberuflich
-Solid Works 2014 SP4
-Creo Elements Direct Drafting (ME10)
DMS/PDM
-Pro.File V8 (8.4)
Simulation
-Simufact Forming 11.0
CAD Nebenberuflich
-Pro Engineer WF 3+4
-Creo Parametric 2.0

erstellt am: 08. Mai. 2014 07:33    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 Student789 10 Unities + Antwort hilfreich

Hallo Student789,

willkommen im WBF.
Zu 1: Hier wäre interesant zu wissen wie du das Teil im Moment in die gewünschte Position bekommst (Verknüpfung, Transform...).

Zu 2: Das ist meines Wissens nicht möglich, der Macro-recorder zeichnet nur VBA auf.

Zu 3: Das einlesen von Excel-Tabellen sollte problemlos möglich sein.

Zu 4: Das wird nur über z.B. Visual Studio gehen und hierzu müßte die Programmierung dann in VB.NET, C# oder C++ (CLI oder 6.0) gemacht werden.

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

Student789
Mitglied


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

Beiträge: 6
Registriert: 07.05.2014

erstellt am: 08. Mai. 2014 09: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

Hallo!

schonmal vielen Dank für die Antworten!

Zu 1): Die Beziehungen werden per MacroRecorder aufgezeichnet. Es werden verschiedene Flächen in Beziehung zueinander gesetzt (z.B. Grundplatte in Winkel x zu der Pleuelfläche y)

Zu 2): Das hatten wir befürchtet, unsere Rechercheergebnisse hatten das auch ergeben

Zu 3): Dafür gibt es Anleitungen in diversen Foren, wir haben bis jetzt nur welche auf Englisch gefunden. Kennt vielleicht jemand eine auf deutsch?

Zu 4): Auch das hatten wir so herausgefunden. Eine Konvertierung von VBA in C++ ist vermutlich nicht so einfach realisierbar oder?

Gibt es außer der "Userformen" noch andere Möglichkeiten das Macro zu Visualisieren und auszuführen?

Mit freundlichen Grüßen
Student789

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Maschinenbautechniker



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

HP Z400 Workstaion
CPU: Intel Xeon 6x 3,33GHz
GPU: NVIDEA Quadro 2000
RAM: 12 GB DDR3
Win 7 x64
CAD Hauptberuflich
-Solid Works 2014 SP4
-Creo Elements Direct Drafting (ME10)
DMS/PDM
-Pro.File V8 (8.4)
Simulation
-Simufact Forming 11.0
CAD Nebenberuflich
-Pro Engineer WF 3+4
-Creo Parametric 2.0

erstellt am: 08. Mai. 2014 12:51    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 Student789 10 Unities + Antwort hilfreich

Hallo!

zu 1: Kannst du dann nicht zum Beispiel die Verknüpfung für den Winkel nach dem erstellen bzw. ändern einfach unterdrücken?

zu 3: Wenn du hier in einem eigenen Thread mit allen nötigen Zusatzinformatione wie z.B. was für Daten wie eingelesen werden sollen (Tabellenaufbau, Pfad direkt indirekt, einlessen in Arry, Splitt ja nein etc.), dann bekommst du hier oder eher noch im VB Brett bestimmt eine Antwort bzw. Tipps wo du die informationen dazu findest. Ich weiß pauschal nichts da ich nur .txt oder .csv für meinen Macros verwende.

zu 4: Manuell kannst du das bestimmt konvertieren  . Was verstehst du unter anders Visualisieren, was möchtest du den genau haben?

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

Student789
Mitglied


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

Beiträge: 6
Registriert: 07.05.2014

erstellt am: 09. Mai. 2014 18:07    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,

zu 1) Hier unser jetziger Quellcode:

Private Sub OK_Click()

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("Skizze1@Pleuel1-1@Test_api", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.EditSketch
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("D1@Skizze1@Pleuel1-1@Test_api", "DIMENSION", 0.166160640000214, 0.379029650029787, 0.918078154479533, False, 0, Nothing, 0)
Dim myDimension As Object
Set myDimension = Part.Parameter("D1@Skizze1@Pleuel1.Part")
myDimension.SystemValue = pleuel1.Value / 1000
boolstatus = Part.Extension.SelectByID2("D2@Skizze1@Pleuel1-1@Test_api", "DIMENSION", 0.153311920526348, 0.370587907877879, 0.812301661633535, False, 0, Nothing, 0)
Set myDimension = Part.Parameter("D2@Skizze1@Pleuel1.Part")
myDimension.SystemValue = pleuel1.Value / 1000
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Skizze1@Pleuel2-1@Test_api", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.EditSketch
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("D1@Skizze1@Pleuel2-1@Test_api", "DIMENSION", 0.377932405842386, 0.391214355338317, 0.748474921199576, False, 0, Nothing, 0)
Set myDimension = Part.Parameter("D1@Skizze1@Pleuel2.Part")
myDimension.SystemValue = pleuel2.Value / 1000
boolstatus = Part.Extension.SelectByID2("D2@Skizze1@Pleuel2-1@Test_api", "DIMENSION", 0.233892591499534, 0.373109774115616, 0.715903470128944, False, 0, Nothing, 0)
Set myDimension = Part.Parameter("D2@Skizze1@Pleuel2.Part")
myDimension.SystemValue = pleuel2.Value / 1000
Part.ClearSelection2 True
Part.SketchManager.InsertSketch True
Part.EditAssembly
boolstatus = Part.Extension.SelectByID2("", "FACE", 0.158254725106758, 0.227170374062553, 0.352893520132739, True, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("", "FACE", 0.228146079429763, 0.25654470295251, 0.875231553599122, True, 1, Nothing, 0)
Dim myMate As Object
Set myMate = Part.AddMate3(6, 0, False, 0.504125139342423, 0, 0, 0.001, 0.001, winkel1.Value, winkel1.Value, winkel1.Value, False, longstatus)
Part.ClearSelection2 True
Part.EditRebuild3


boolstatus = Part.Extension.SelectByID2("", "FACE", 0.388615304179723, 0.22694171498739, 0.984528978258766, True, 1, Nothing, 0)
Part.TranslateComponent
boolstatus = Part.Extension.SelectByID2("", "FACE", 0.206555217426796, 0.25826465846751, 0.939387039430585, False, 0, Nothing, 0)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("", "FACE", 0.207829670989042, 0.253865026612004, 0.939387039430585, True, 1, Nothing, 0)
Set myMate = Part.AddMate3(6, 0, False, 6.59028890243529E-02, 0, 0, 0.001, 0.001, winkel2.Value, winkel2.Value, winkel2.Value, False, longstatus)
Part.ClearSelection2 True
Part.EditRebuild3


boolstatus = Part.Extension.SelectByID2("Angle3", "MATE", 0, 0, 0, False, 0, Nothing, 0)
Part.EditDelete
boolstatus = Part.Extension.SelectByID2("Angle4", "MATE", 0, 0, 0, False, 0, Nothing, 0)
Part.EditDelete
End Sub


In dem Macro funktioniert die Längenänderung über das Userform, jedoch funktioniert die Winkeländerung nicht.

Die WInkel in einer Beziehnung zueinandersetzten und diese dann unterdrücken hat bei uns leider nicht funktioniert, dass hatten wir bereits ausprobiert. Das Macro scheint die ausgewählten Flächen für die Winkelbeziehnung nicht sauber zu erkennen.
Wir Probieren auch die Skizzenlinien auszuwählen, um die Pleuel in eine Beziehnung zueinander zusetzten, da das Programm die jeweiligen Skizzenlinien sauber erkennt. Jedoch funktioniert auch das noch nicht.
Wir haben auch versucht durch das einfügen von Ebenen, auf welche sich die Pleuel in ihrer Lage beziehen zu erstellen, jedoch ist es uns nicht möglich, zwei erstellte Ebenen in eine Winkelbeziehnung zueinander zu setzten. Das müsste doch gehen oder ist das nicht möglich in SW?

zu 3)
-Eine Excel-Tabelle mit drei Spalten (Zeit, Alpha, Beta) und vielen Zeilen
-bekannter Pfad á la X:\Service\AllUser\Application\DP_Winkel\Tab1.xls
-dementsprechend ein Array
-kein SPlit (wir wissen auch nicht so genau, was man damit macht?)

zu 4) Im Grunde hatten wir uns eine .exe Datei vorgestellt, jedoch hat sich das ja erübrigt. Unter Visualisierung verstehen wir sowas wie die Userform-Darstellung nur außerhalb von SW.

Mit freundlichen Grüßen
Student789

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2100
Registriert: 02.10.2006

Firma: SW 2018-5.0 Professional,
Windows 7 Pro 64bit, i7-2600K
3,4 GHz, 16 GbRAM, Quadro K2000
250GB SSD
Home:
SW 2016-5.0
SW 2017-5.0
SW 2018-5.0
SW 2019-0.0
Windows 7 Home Premium 64bit,
i7-860, 3,2 GHz, 16 GbRAM, GeForce GTX 1050Ti
Samsung SSD 860EVO 500GB

erstellt am: 10. Mai. 2014 08:33    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 Student789 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Student789:

Die WInkel in einer Beziehnung zueinandersetzten und diese dann unterdrücken hat bei uns leider nicht funktioniert

Hallo,
ihr könntet mal beim Aufnehmen mit dem Makrorekorder folgendes Probieren.
Wenn ihr eine neue Winkelbeziehung erzeugt, gibt es eine Option "Nur für Positionierung verwenden".
Dabei wird dann keine Verknüpfung erzeugt, das Teil nimmt aber dennoch die gewünschte Position ein.
Evtl. bekommt ihr bei dieser Aufzeichnung einen geeigneten Code angeboten.

Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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

Student789
Mitglied


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

Beiträge: 6
Registriert: 07.05.2014

erstellt am: 10. Mai. 2014 12: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

Moin Andi!

Dein Tip funktioniert in der Weise, dass keine Beziehung mehr hergestellt wird. Leider erkennt er beim Abspielen des Macros aber wieder die Bezugsflächen nicht, die ich zueinaner Positioniert habe. 

Grüße!

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Maschinenbautechniker



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

HP Z400 Workstaion
CPU: Intel Xeon 6x 3,33GHz
GPU: NVIDEA Quadro 2000
RAM: 12 GB DDR3
Win 7 x64
CAD Hauptberuflich
-Solid Works 2014 SP4
-Creo Elements Direct Drafting (ME10)
DMS/PDM
-Pro.File V8 (8.4)
Simulation
-Simufact Forming 11.0
CAD Nebenberuflich
-Pro Engineer WF 3+4
-Creo Parametric 2.0

erstellt am: 12. Mai. 2014 07:15    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 Student789 10 Unities + Antwort hilfreich

Hallo,

versucht es mal über die Hauptebenen der Komponenten zu verknüpfen, da diese ja einen festen Namem haben.
Da bei dem Versuch die Fläche zu makieren diese auch vorher in der richtigen Position stehen muß, dass SWX diese auch findet.

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

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