一、SolidWorks宏的使用说明

SolidWorks常用的宏,一般都是使用VBA来编写,以.swp为后缀的文件。

1. 首先,是怎么使用宏文件,有两种方法。

1.1 自定义宏按钮,然后要使用的时候点击按钮即可。

solidworks宏一般在哪里(关于SolidWorks宏的使用说明)(1)

1.2 设置快捷键。方法:自定义>键盘>宏>新建宏按钮,见下图——

solidworks宏一般在哪里(关于SolidWorks宏的使用说明)(2)

2. 怎么编辑宏。2.1 调出宏工具。

solidworks宏一般在哪里(关于SolidWorks宏的使用说明)(3)

2.2使用VBA编辑器。

solidworks宏一般在哪里(关于SolidWorks宏的使用说明)(4)

3. 使用宏时发生的错误。3.1 提示找不到工程或库,可通过以下的设置修复(不同版本的SW对应不同版本的库,显示缺失的时候,可以从下方找到对应版本的库,打上勾确定即可)。

solidworks宏一般在哪里(关于SolidWorks宏的使用说明)(5)

3.2 别人正常运行的宏,如果你运行不了或者没出效果,有几个可能:①是否没打开引用(见3.1);②可能是因为SW版本过低,宏里使用了旧版本没有的API;③是否系统里面安装有多个版本的SW;④电脑的【文件夹选项】中,是否选择了隐藏扩展名;⑤SW语言的问题,使用中文和英文会有区别;⑥可能该宏考虑不够全面,只适用于一般情况,没考虑到你的特殊情况。

二、关于VBA宏引用(宏适用的SW版本)的讲解

相信很多人在编写、调试、及使用宏的时候,都遇到过这样的报错: 找不到工程或引用,用户类型未定义, 不支持该属性或方法。。。具体情况有如下几种可能:1.宏在高版本的应用中编写并引用了高版本的库,拿到低版本应用中运行,就会出现引用缺失。 例如,宏在SW2018版里编写,引用了SW2018的库,用户使用的却是SW2016。2.引用的控件缺失。例如,为了实现某个动画效果,引用了flash的控件,但是用户电脑上并没有这个控件,就会报错。3.引用正常,但是使用的属性或方法只有高版本中才出现。例如,RenameDocument这个方法在SW2016版本才出现,在SW2015及以下版本中是不支持的。本版版主Allate有个扫盲帖,里面也说到这些内容了,解决办法就是打开VBA的IDE编辑器,然后在工程引用里面更正引用。更正引用对写代码的人可能不算个问题,但是对不懂代码的小白或者宏被加了密码的情况,就有些强人所难了。在此,我算是做个补充吧,希望可以减少写宏代码的各位以及宏用户的困扰。以下内容,主要供写VB(A)代码的各位参考,新手小白可能一时半会不明所以,请略过就好。以下内容是VB(A)甚至其他编程语言的共性知识,不仅仅是在Solidworks里,在AutoCAD,Office,WPS等支持VBA应用中都是一样的。'=======================================================对象变量的申明可以是显式的或隐式的,或者称为 前期绑定和后期绑定。举例:'以下两行是显式申明,需要引用 Sldworks xxxx Type LibraryDim swApp As SldWorks.SldWorksDim swModel As SldWorks.ModelDoc2'以下两行是隐式申明,不需要引用 Sldworks xxxx Type LibraryDim swApp As Object 'as SldWorks.SldWorksDim swModel As Object 'as SldWorks.ModelDoc21.显式申明(前期绑定)好处:是显式声明的对象变量会自动列出相关的属性和方法,这对写代码的人是很友好的。缺点:需要添加引用,引用了低版本的库,拿到高版本应用中可以正常使用,反过来,引用了高版本的库,在低版本应用下就无法使用了。2.隐式申明(后期绑定)好处:是不用担心引用问题,因为没有引用。只要宏里面使用的属性和方法在当前版本应用中支持,这个宏就能正常运行。缺点:申明的对象变量不会自动列出其支持的属性和方法,这对写代码的人是个考验。那么,如果既希望写代码方便,又不想担心各版本引用问题,可以有以下两全其美的解决办法:(1)在写代码调试时,将需要的引用正常添加(勾选),相关的对象变量也都显式申明。注:Solidworks及其他常见的软件一直在更新迭代,相应的API接口也一样在更新迭代,但都是逐步增加接口的,很多API接口在旧版中老早就存在了。并且为了兼容性,新版会保留支持大部分旧版的接口,所以如果可实现功能,请尽量使用较低版的属性和方法,这样你写的宏可以适用更多的版本。(2)在代码调试完成后,将不必要的引用去掉,将里面显式申明的对象变量改成隐式申明。说明:将显式申明改为隐式申明后,会存在报错或不报错但达不到预期的情况,如果你遇到这样的情况,不要过来骂我说我骗人,你就继续显式申明就是了。。。相关的,这里也说一下关于一些常量的定义,例如 ModelDoc的类型(一般通过GetType得到),会涉及到如下几个常量:如果引用了SolidWorks XXXX Constant Type Library,这几个常量就可以直接用。常量名 常量值swDocASSEMBLY 2swDocDRAWING 3swDocLAYOUT 5swDocNONE 0swDocPART 1swDocSDM 4样例代码:if swModel.GetType= swDocPART then ... 如果swModel的类型是swDocPART(零件),则.....如果不想引用相关的常量库,可以有以下两种做法:(1). 用对应的常量数值代替(会降低代码的可读性,如果对应的数值太多,一般很难记住其含义)以上样例代码可以写成If swModel.GetType= 1 then ... 如果查询到swModel的类型是1,则... 这样写功能与上面的写法是等效的,但是可读性就差了,你得记住这里1的含义是零件模型才能理解这一句的意思。(2).在代码中自己加入以下常量定义,即可达到和引用常量库后相同的效果了。Const swDocASSEMBLY = 2Const swDocDRAWING = 3Const swDocLAYOUT = 5Const swDocNONE = 0Const swDocPART = 1Const swDocSDM = 4

VBA宏引用总结

低版本做的宏,高版本可以使用,并且会自动更换新版本的引用

高版本做的宏,低版本不一定能用,而且引用会丢失

所以若考虑通用性的话,做的宏尽量使用低版本的SolidWorks

,