You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Python执行SolidWorks零件建模VBA宏?

Got it, let's walk through exactly how to run your SolidWorks VBA macro straight from Python—no need to manually open SolidWorks or run the macro inside the app. Here's a step-by-step solution with two solid options:

Solution: Run SolidWorks VBA Macro via Python (No Manual Interaction)

First up, prerequisites you'll need:

  • Install the pywin32 library (to handle COM interactions with SolidWorks):
    pip install pywin32
    
  • Ensure SolidWorks is installed on your machine, and API automation is enabled (this is on by default for most installs; if not, check Tools > Options > System Options > General > Enable SolidWorks API in SolidWorks).

Option 1: Call Your Saved VBA Macro File

First, save your existing VBA code as a .swp file (e.g., CreatePartMacro.swp) in a directory you can easily reference. Then use Python to launch SolidWorks (if it's not running) and execute the macro:

import win32com.client
import os

def run_solidworks_macro(macro_path):
    # Connect to SolidWorks, or launch it if it's not already running
    sw_app = win32com.client.Dispatch("SldWorks.Application")
    # Set to False to run SolidWorks in the background (no visible window)
    sw_app.Visible = True
    
    # Verify the macro file exists
    if not os.path.exists(macro_path):
        raise FileNotFoundError(f"Macro file not found at: {macro_path}")
    
    # Execute the macro: returns 0 = success, 1 = error, 2 = cancelled
    error_code = sw_app.ExecuteMacro2(macro_path, "", "Main", 0, 0)
    
    if error_code == 0:
        print("Macro executed successfully!")
    else:
        print(f"Macro failed with error code: {error_code}")

# Replace this with your actual macro file path
macro_file = r"C:\Your\Path\To\CreatePartMacro.swp"
run_solidworks_macro(macro_file)

Option 2: Translate VBA Logic Directly to Python

Instead of relying on a separate macro file, you can rewrite your VBA code directly in Python using the SolidWorks COM API. This keeps everything in one script and avoids needing to manage a separate .swp file:

import win32com.client
from win32com.client import constants as sw_const

def create_solidworks_part():
    # Connect to SolidWorks instance
    sw_app = win32com.client.Dispatch("SldWorks.Application")
    sw_app.Visible = True
    
    # Grab the default part template path
    default_template = sw_app.GetUserPreferenceStringValue(sw_const.swUserPreferenceStringValue_e.swDefaultTemplatePart)
    
    # Create a new part document
    sw_doc = sw_app.NewDocument(default_template, 0, 0, 0)
    
    # Select the Front Plane to sketch on
    bool_status = sw_doc.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0, None, sw_const.swSelectOption_e.swSelectOptionDefault)
    
    # Start the sketch
    sw_sketch_manager = sw_doc.SketchManager
    sw_sketch_manager.InsertSketch(True)
    
    # Draw your outline lines (matches your VBA code)
    sw_sketch_manager.CreateLine(0, 0, 0, 0, 1, 0)
    sw_sketch_manager.CreateLine(0, 1, 0, 2, 1, 0)
    sw_sketch_manager.CreateLine(2, 1, 0, 2, 2, 0)
    sw_sketch_manager.CreateLine(2, 2, 0, 4, 2, 0)
    sw_sketch_manager.CreateLine(4, 2, 0, 4, 1, 0)
    sw_sketch_manager.CreateLine(4, 1, 0, 6, 1, 0)
    sw_sketch_manager.CreateLine(6, 1, 0, 6, 0, 0)
    sw_sketch_manager.CreateLine(0, 0, 0, 6, 0, 0)
    
    # Clear sketch selection
    sw_doc.ClearSelection2(True)
    
    # Switch to isometric view (use "*Trimétrica" if you're on a Spanish-language SolidWorks install)
    sw_doc.ShowNamedView2("*Isometric", 8)
    sw_doc.ViewZoomtofit2()
    
    # Select the bottom line for the revolve feature (coordinates from your original VBA)
    bool_status = sw_doc.Extension.SelectByID2("Line8", "SKETCHSEGMENT", 2.27939213179474, 0.424565217882254, 0.640103542052883, False, 16, None, 0)
    
    # Create the revolve feature
    feature_revolve = sw_doc.FeatureManager.FeatureRevolve2(
        True, True, False, False, False, False,
        0, 0, 6.2831853071796, 0, False, False,
        0.01, 0.01, 0, 0, 0, True, True, True
    )
    
    # Clean up selection settings
    sw_doc.SelectionManager.EnableContourSelection = False
    sw_doc.SetPickMode()
    sw_doc.ClearSelection2(True)
    
    print("Part created successfully!")

# Run the part creation function
create_solidworks_part()

Quick Notes:

  • If you don't need to see SolidWorks run, set sw_app.Visible = False to run it in the background.
  • The coordinate values in the SelectByID2 call are copied from your original VBA. If the sketch doesn't select the correct line, you might need to adjust these or use a more robust selection method (like selecting by sketch segment index instead of coordinates).
  • If the default template path isn't working, you can hardcode it (e.g., r"C:\ProgramData\SolidWorks\SOLIDWORKS 2024\templates\Part.prtdot").

内容的提问来源于stack exchange,提问作者lotsoeloso

火山引擎 最新活动