2016-05-27 7 views
2

Ich versuche, eine komplexe Geometrie mit SolidWorks und einem VBA-Makro, dass ich es mit einem Batch-Skript starten.Ausführen von SolidWorks im Hintergrund und Beenden mit VBA-Makro

Zuerst habe ich ein einfaches Makro, um zu überprüfen, ob es möglich ist, Solidworks im Hintergrund zu starten, ein neues Teil zu erstellen, einen einfachen Cube zu tun und dann speichern & schließen Sie es.

Zwei Dinge passieren, die ich nicht möchte: die Solidworks-GUI wird tatsächlich in meinem Bildschirm angezeigt und die Solidworks werden nicht automatisch nach dem Speichern des Dokuments beendet. Es schließt nur den aktuellen Teil, aber nicht die Software. Das Dokument ist perfekt gespeichert und die Geometrie ist korrekt. Es ist ein Problem, weil mein Haupt-Batch-Makro nicht weiter ausgeführt werden kann, wenn ich die Software nicht manuell schließe. Hier

ist der Code:

Dim swApp As Object 

Dim Part As Object 
Dim boolstatus As Boolean 
Dim longstatus As Long, longwarnings As Long 

Sub main() 

Set swApp = _ 
Application.SldWorks 

Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2015\templates\Pieza.prtdot", 0, 0, 0) 

' "Pieza" means part 
swApp.ActivateDoc2 "Pieza1", False, longstatus 

Set Part = swApp.ActiveDoc 

Dim myModelView As Object 

' Use SolidWorks in background mode 
swApp.Visible = False 

Set myModelView = Part.ActiveView 

myModelView.FrameState = swWindowState_e.swWindowMaximized 

' Select lateral view and insert a sketch. Then extrude it 
boolstatus = Part.Extension.SelectByID2("Vista lateral", "PLANE", 0, 0, 0, False, 0, Nothing, 0) 
Part.SketchManager.InsertSketch True 
Part.ClearSelection2 True 
boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstToRectEntity, swUserPreferenceOption_e.swDetailingNoOptionSpecified, False) 
boolstatus = Part.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swSketchAddConstLineDiagonalType, swUserPreferenceOption_e.swDetailingNoOptionSpecified, True) 

Dim vSkLines As Variant 

vSkLines = Part.SketchManager.CreateCornerRectangle(0, 0, 0, -0.144655684475683, 8.79061467198382E-02, 0) 
Part.ClearSelection2 True 
Part.SketchManager.InsertSketch True 
Part.ShowNamedView2 "*Trimétrica", 8 
Part.ClearSelection2 True 
boolstatus = Part.Extension.SelectByID2("Croquis1", "SKETCH", 0, 0, 0, False, 4, Nothing, 0) 

Dim myFeature As Object 

Set myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0, 0.2, 0.01, False, False, False, False, 1.74532925199433E-02, 1.74532925199433E-02, False, False, False, False, True, True, True, 0, 0, False) 

Part.SelectionManager.EnableContourSelection = False 
longstatus = Part.SaveAs3("C:\tmp_SW\part.SLDPRT", 0, 2) 

' I tried to use a variable as a string, however using "swApp.QuitDoc Part.GetTitle" gives the same result 
Dim myTitle As String 

myTitle = Part.GetTitle 

swApp.QuitDoc myTitle 

End Sub 

Ich hoffe, dass die spanischen Worte kein Problem für das Verständnis des Textes sein.

Vielen Dank im Voraus.

Antwort

0

Nun, einige Tage der Forschung, und ich habe dieses schöne Beispiel gefunden:

SolidWorks Example

Und der Schlüssel zu meiner Antwort war:

Ich hoffe, das Ihnen allen helfen. Freundliche Grüße.

+0

Können Sie mir bitte sagen, wie Sie dieses Skript ausführen? Ich habe einen Makrocode, den ich gerne von der Windows-Befehlszeile aus ausführen möchte, ohne die SolidWorks-Anwendung zu öffnen –

Verwandte Themen