Выбор Solidworks VBA Edge не работает

Я приложил, как мой макрос в настоящее время выглядит ниже. До сих пор макрос будет создавать прямоугольник с двумя отверстиями. Затем необходимо снять фаски с четырех углов. Но по какой-то причине, когда я пытаюсь выбрать эти углы, это не сработает. Я на самом деле получу разные результаты на разных попытках.

Часть кода, о которой идет речь, это последние 7 или около того строк. Если я запускаю эти строки полностью отдельно от макроса, я получаю результаты, которые мне нужны. Это может быть просто синтаксис?

Я новичок в VBA в отношении Solidworks. Я работал с этим в Excel. Так что, если вы заметите какие-либо вредные привычки, мы будем благодарны за другие отзывы

    Option Explicit
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swModelDocExt As SldWorks.ModelDocExtension
    Dim swSketchMgr As SldWorks.SketchManager
    Dim swFeature As SldWorks.Feature
    Dim swFeatureMgr As SldWorks.FeatureManager
    Dim vSkLines As Variant
    Dim boolstatus As Boolean
    Dim longstatus As Long
    Dim circ As SldWorks.SketchSegment
    Dim cx1 As Double
    Dim cx2 As Double
    Dim cy1 As Double
    Dim cy2 As Double
    Dim d1 As Double
    Dim d2 As Double
    Dim b1 As Double
    Dim w1 As Double
    Dim t1 As Double
    Dim in2mmconv As Double
    Dim m2mmconv As Double

    Sub main()
    in2mmconv = 0.0254
    m2mmconv = 1 / 1000
    b1 = 5.5 * in2mmconv
    w1 = 3.5 * in2mmconv
    t1 = 0.75 * in2mmconv
    cy1 = b1 - 1.75 * in2mmconv
    cx1 = w1 / 2
    d1 = 66.779 * m2mmconv + 0.0002 * in2mmconv
    cx2 = cx1
    cy2 = cy1 - 79.3 * m2mmconv
    d2 = 0.5007 * in2mmconv

    Set swApp = Application.SldWorks

    ' Reset the counts for untitled documents for this macro

    Set swModel = swApp.ActiveDoc

    ' Select the Front plane

    Set swModelDocExt = swModel.Extension

    boolstatus = swModelDocExt.SelectByID2("Front Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0)

    ' Open a sketch and sketch a rectangle

    Set swSketchMgr = swModel.SketchManager

    swSketchMgr.InsertSketch True

    swModel.ClearSelection2 True

    vSkLines = swSketchMgr.CreateCornerRectangle(0, b1, 0, w1, 0, 0)

    ' Change view orientation and clear all selections

    swModel.ShowNamedView2 "*Trimetric", 8

    swModel.ClearSelection2 True

    ' Select the sketch entities to extrude

    Set swModelDocExt = swModel.Extension

    boolstatus = swModelDocExt.SelectByID2("Line2", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)

    boolstatus = swModelDocExt.SelectByID2("Line1", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing, 0)

    boolstatus = swModelDocExt.SelectByID2("Line4", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing, 0)

    boolstatus = swModelDocExt.SelectByID2("Line3", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing, 0)

    ' Create the extrude feature

    Set swFeatureMgr = swModel.FeatureManager

    Set swFeature = swFeatureMgr.FeatureExtrusion2(True, False, True, 0, 0, t1, 0.381, False, False, False, False, 0.01745329251994, 0.01745329251994, False, False, False, False, True, True, True, 0, 0, False)

    ' Fit the model in the graphics area

    swModel.ViewZoomtofit2

    ' Select the face on the extrude feature

    ' and sketch the entities to pattern

    swModel.ShowNamedView2 "*Front", 1

    boolstatus = swModelDocExt.SelectByID2("", "FACE", -w1, 0, -t1, False, 0, Nothing, 0)

    Set circ = swSketchMgr.CreateCircle(cx1, cy1, 0, cx1 - d1 / 2, cy1, 0)

    Set circ = swSketchMgr.CreateCircle(cx2, cy2, 0, cx2 - d2 / 2, cy2, 0)

    boolstatus = swModelDocExt.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)

    boolstatus = swModelDocExt.SelectByID2("Arc2", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)

    swModel.ClearSelection2 True

    Set swFeature = swFeatureMgr.FeatureCut3(True, False, False, swEndCondThroughAll, swEndCondBlind, 0.01, 0.01, False, False, False, False, 0.01745329251994, 0.01745329251994, False, False, False, False, False, True, True, False, False, False, swStartSketchPlane, 0, False)

    swModel.ClearSelection2 True

    boolstatus = swModelDocExt.SelectByID2("", "EDGE", 0, 0, -t1 / 2, True, 0, Nothing, 0)

    boolstatus = swModelDocExt.SelectByID2("", "EDGE", 0, b1, 0, True, 0, Nothing, 0)

    boolstatus = swModelDocExt.SelectByID2("", "EDGE", w1, b1, -t1 / 2, True, 0, Nothing, 0)

    boolstatus = swModelDocExt.SelectByID2("", "EDGE", w1, 0, -t1 / 2, True, 0, Nothing, 0)

    Set swFeature = swFeatureMgr.InsertFeatureChamfer(4, 1, 0.00254, 0.78539816339745, 0, 0, 0, 0)

    End Sub

1 ответ

Я недавно столкнулся с той же проблемой. После некоторого поиска в Google я обнаружил, что метод selectbyID2 может вести себя при определенных обстоятельствах. Одним из них является то, что есть край, который находится над требуемым краем. И их так много. Итак, что я сделал в своем коде? Я планировал повернуть модель так, чтобы требуемый объект был выбран в обычном режиме. В моем случае эта процедура полностью решила мои проблемы. Попытайся. Чтобы повернуть модель, используйте метод showNamedView2 перед использованием selectbyID2.

Другие вопросы по тегам