羽飞yufei 2024-08-27 10:59 采纳率: 0%
浏览 365
已结题

VBA运行程序时错误“91”,对象变量或 With 块变量没有设置

运行代码时发现报错:对象变量或 With 块变量没有设置(错误 91)

img

点击帮助的详细解释是:

img

按照目前代码,没有引用With块变量,那就是对象变量出问题了

点击调试定位到:swModel.ShowNamedView2 "*Isometric", 7 '切换到等轴测视图

img

具体代码如下:

Private Sub cmdPart_Click()
  Dim swApp As SldWorks.SldWorks
  Dim swModel As SldWorks.ModelDoc2
  Dim swPart As SldWorks.PartDoc
  
  Set swApp = Application.SldWorks
  Set swModel = swApp.ActiveDoc
  Set swPart = swModel

  ' Check to see if a part is loaded
  If swModel Is Nothing Then
    swApp.SendMsgToUser2 "请打开一个零件.", swMbStop, swMbOk
    Exit Sub
  End If

  If chkMirror.Value = True Then
    Dim boolstatus As Boolean
    boolstatus = swModel.Extension.SelectByID2("top", "PLANE", 0, 0, 0, False, 0, Nothing, 0) '选择上视基准面
    'Next method called from specific PartDoc object.
    swPart.MirrorPart2 False, swMirrorPartOptions_ImportSolids, swModel '镜像
    swModel.ShowNamedView2 "*Isometric", 7 '切换到等轴测视图
    swModel.ViewZoomtofit2 '使视图适应窗口大小
    swApp.ArrangeWindows 1 '1窗口水平平铺排列
    Dim retval As Boolean
    Dim errors As Long
    Set swModel = swApp.ActivateDoc3("BLM00020-20-A05-00Z.SLDPRT", False, swRebuildActiveDoc, errors) '回到BLM00020-20-A05-00Z.SLDPRT 这个零件就是自己随机打开的测试零件,记得修改
    retval = swModel.DeSelectByID("上视基准面", "PLANE", 0, 0, 0)
     ' 检查操作是否成功
    If retval Then
        swApp.SendMsgToUser2 "平面已取消选择.", swMbInformation, swMbOk
    Else
        swApp.SendMsgToUser2 "取消选择平面失败.", swMbStop, swMbOk
  End If
End If
End Sub
  • 写回答

1条回答 默认 最新

  • 羽飞yufei 2024-08-27 11:45
    关注

    知道怎么解决了:
    top修改为上视基准面 还是中英文表达方式替换的问题

    分析:
    1.对象变量要么是自己定义的,写错了
    2.对象变量是对象库里的,引用的时候没引用对

    基于这个逻辑,报错就没指向自己定义的变量
    那就是引用的变量和对象库不符

    往上找引用对象库的代码:

    
     boolstatus = swModel.Extension.SelectByID2("top", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
    

    这个代码需要引用对象库里面的,top-上视基准面 PLANE-基准面 top就不符合SolidWorks显示的名称,用的是中文版,应该是上视基准面

    我在Kimi搜索PLANE 是也告诉我:基准平面的名称(在这个例子中是 "Front Plane")必须与 SolidWorks 文档中的实际基准平面名称完全匹配。

    img

    OK

    发现问题了,把top修改为上视基准面,代码能正确运行了。

    正确代码如下:

    Private Sub cmdPart_Click()
      Dim swApp As SldWorks.SldWorks
      Dim swModel As SldWorks.ModelDoc2
      Dim swPart As SldWorks.PartDoc
      
      Set swApp = Application.SldWorks
      Set swModel = swApp.ActiveDoc
      Set swPart = swModel
    
      ' Check to see if a part is loaded
      If swModel Is Nothing Then
        swApp.SendMsgToUser2 "请打开一个零件.", swMbStop, swMbOk
        Exit Sub
      End If
    
      If chkMirror.Value = True Then
        Dim boolstatus As Boolean
        boolstatus = swModel.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0) '选择上视基准面,记得注意SolidWorks是中文版还是英文版  中文版:上视基准面 英文版:Top Plane
        'Next method called from specific PartDoc object.
        swPart.MirrorPart2 False, swMirrorPartOptions_ImportSolids, swModel '镜像零件
        swModel.ShowNamedView2 "*Isometric", 7 '切换到等轴测视图
        swModel.ViewZoomtofit2 '使视图适应窗口大小
        swApp.ArrangeWindows 1 '1窗口水平平铺排列
        Dim retval As Boolean '定义为布尔值
        Dim errors As Long
        Set swModel = swApp.ActivateDoc3("BLM00020-20-A05-00Z.SLDPRT", False, swRebuildActiveDoc, errors) '回到BLM00020-20-A05-00Z零件 这个零件就是自己随机打开的测试零件,记得修改
        retval = swModel.DeSelectByID("上视基准面", "PLANE", 0, 0, 0) '取消选择上视基准面
         ' 检查操作是否成功
        If retval Then
            swApp.SendMsgToUser2 "平面已取消选择.", swMbInformation, swMbOk
        Else
            swApp.SendMsgToUser2 "取消选择平面失败.", swMbStop, swMbOk
      End If
    End If
    End Sub
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 9月4日
  • 创建了问题 8月27日