如何通过SolidWorks API修改草图线长 运行报对象变量未设置错误
SolidWorks VBA修改草图尺寸报对象变量未设置错误
问题描述
通过VBA代码修改SolidWorks草图内直线长度时,在swDim.SetSystemValue3行触发运行时错误:
Object variable or With block variable not set(对象变量或With块变量未设置)
SolidWorks运行界面:
问题复现代码:
Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc swModel.AddConfiguration3 "test", Empty, Empty, 0 Dim swDim As SldWorks.Dimension Set swDim = swModel.Parameter("D1.@Szkic1") swDim.SetSystemValue3 0.005, swThisConfiguration, Empty '(报错行) swModel.ForceRebuild3 True End Sub
报错原因
报错的核心是swDim对象值为Nothing,对空对象调用方法必然触发该类错误。swModel.Parameter()返回空的常见原因:
- 参数字符串格式错误:传入的
"D1.@Szkic1"在D1和@之间多了多余的句点,SolidWorks尺寸参数的标准命名格式为<尺寸编号>@<所属特征名>,不存在多余分隔符。 - 名称拼写不匹配:SolidWorks参数名严格匹配字符内容,不同语言版本默认草图命名不同:中文环境默认草图名为
草图1,英文环境为Sketch1,波兰语等本地化版本才会使用Szkic1命名,只要实际尺寸名、草图名和代码传入值有一个字符不匹配,就无法获取到目标参数。 - 目标草图处于压缩状态、或当前激活的文档不是尺寸所属的模型文档,也会导致参数读取失败。
修复方案
- 先获取准确的参数全名:进入目标草图的编辑状态,双击需要修改的直线尺寸,直接复制左侧属性面板显示的完整尺寸名称,不要手动输入避免拼写错误。
- 替换代码中
Parameter()方法的传入值,增加空值校验逻辑提前拦截异常,修正后可正常运行的代码如下:
Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc ' 校验是否存在激活的模型文档 If swModel Is Nothing Then MsgBox "请先打开需要修改的目标零件/装配体文档" Exit Sub End If swModel.AddConfiguration3 "test", Empty, Empty, 0 Dim swDim As SldWorks.Dimension ' 替换为实际复制的完整尺寸名,不要加多余字符 Set swDim = swModel.Parameter("D1@Szkic1") ' 校验是否成功获取尺寸对象 If swDim Is Nothing Then MsgBox "未匹配到目标尺寸,请检查尺寸名、草图名拼写是否正确" Exit Sub End If ' 注意:SetSystemValue3 传入的长度单位为米,0.005对应5mm swDim.SetSystemValue3 0.005, swThisConfiguration, Empty swModel.ForceRebuild3 True End Sub
内容的提问来源于stack exchange,提问作者Szymon Tolko
相关产品推荐
相关产品推荐


