SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 20502|回复: 20
打印 上一主题 下一主题

[干货分享]关于VBA宏引用(宏适用的SW版本)的讲解

  [复制链接]

1

主题

218

帖子

2523

金币

传奇

Rank: 8Rank: 8

积分
7670

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

跳转到指定楼层
楼主
 楼主| 发表于 2022-5-27 23:54:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

   经典图书
相信很多人在编写、调试、及使用宏的时候,都遇到过这样的报错: 找不到工程或引用,用户类型未定义, 不支持该属性或方法。。。
具体情况有如下几种可能:
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 Library
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

'以下两行是隐式申明,不需要引用  Sldworks xxxx Type Library
Dim swApp As Object               'as SldWorks.SldWorks
Dim swModel As Object            'as SldWorks.ModelDoc2

1.显式申明(前期绑定)
好处:是显式声明的对象变量会自动列出相关的属性和方法,这对写代码的人是很友好的。
缺点:需要添加引用,引用了低版本的库,拿到高版本应用中可以正常使用,反过来,引用了高版本的库,在低版本应用下就无法使用了。

2.隐式申明(后期绑定)
好处:是不用担心引用问题,因为没有引用。只要宏里面使用的属性和方法在当前版本应用中支持,这个宏就能正常运行。
缺点:申明的对象变量不会自动列出其支持的属性和方法,这对写代码的人是个考验。

那么,如果既希望写代码方便,又不想担心各版本引用问题,可以有以下两全其美的解决办法:
(1)在写代码调试时,将需要的引用正常添加(勾选),相关的对象变量也都显式申明。
   注:Solidworks及其他常见的软件一直在更新迭代,相应的API接口也一样在更新迭代,但都是逐步增加接口的,
   很多API接口在旧版中老早就存在了。并且为了兼容性,新版会保留支持大部分旧版的接口,
    所以如果可实现功能,请尽量使用较低版的属性和方法,这样你写的宏可以适用更多的版本。
(2)在代码调试完成后,将不必要的引用去掉,将里面显式申明的对象变量改成隐式申明。

说明:将显式申明改为隐式申明后,会存在报错或不报错但达不到预期的情况,
如果你遇到这样的情况,不要过来骂我说我骗人,你就继续显式申明就是了。。。

相关的,这里也说一下关于一些常量的定义,例如 ModelDoc的类型(一般通过GetType得到),会涉及到如下几个常量:
如果引用了SolidWorks XXXX Constant Type Library,这几个常量就可以直接用。
常量名                 常量值
swDocASSEMBLY     2
swDocDRAWING      3
swDocLAYOUT        5
swDocNONE            0
swDocPART            1
swDocSDM              4

样例代码:
if swModel.GetType= swDocPART  then ...  如果swModel的类型是swDocPART(零件),则.....

如果不想引用相关的常量库,可以有以下两种做法:
(1). 用对应的常量数值代替(会降低代码的可读性,如果对应的数值太多,一般很难记住其含义)
  以上样例代码可以写成
  If swModel.GetType= 1 then ...                     如果查询到swModel的类型是1,则...  
  这样写功能与上面的写法是等效的,但是可读性就差了,你得记住这里1的含义是零件模型才能理解这一句的意思。

(2).在代码中自己加入以下常量定义,即可达到和引用常量库后相同的效果了。
Const swDocASSEMBLY = 2
Const swDocDRAWING  = 3
Const swDocLAYOUT   = 5
Const swDocNONE     = 0
Const swDocPART     = 1
Const swDocSDM      = 4






评分

参与人数 2威望 +10 金币 +102 贡献 +10 收起 理由
Allate + 5 + 50 + 5 很给力!
猪猪侠 + 5 + 52 + 5 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏10 转播转播 分享教程|习题|模型|技巧 点赞点赞2 拍砖拍砖
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

1

主题

113

帖子

229

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
499
QQ
沙发
发表于 2022-5-31 15:05:45 | 只看该作者
很不错,顶一下!
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

6

主题

58

帖子

525

金币

堂主

Rank: 4

积分
905
QQ
板凳
发表于 2022-5-31 15:06:23 | 只看该作者

   经典图书
SolidWorks机械工程师网,顶一下。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

788

帖子

441

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2188

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

地板
发表于 2022-6-5 09:52:05 | 只看该作者
楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

11

主题

610

帖子

2485

金币

传奇

Rank: 8Rank: 8

积分
5200

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

5#
发表于 2022-6-5 10:20:23 来自手机 | 只看该作者

   经典案例图书
这个问题想了很久,后来恍然大悟,我接着又想了很久,后来有些迷糊,然后我又想了很久,,,,,,
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

3

帖子

5

金币

混混

Rank: 1

积分
20
6#
发表于 2022-6-5 16:56:22 | 只看该作者
谢谢楼主的讲解
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

139

帖子

77

金币

堂主

Rank: 4

积分
512

最佳新人活跃会员热心会员宣传达人灌水之王

7#
发表于 2022-8-28 15:42:00 | 只看该作者

   经典案例图书
楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

11

主题

506

帖子

1111

金币

传奇

Rank: 8Rank: 8

积分
5856

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

8#
发表于 2022-8-29 17:10:50 | 只看该作者
楼主太有才了,膜拜中……
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

2

主题

124

帖子

189

金币

堂主

Rank: 4

积分
883

最佳新人活跃会员热心会员宣传达人灌水之王

9#
发表于 2022-8-30 11:45:03 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

200

帖子

1740

金币

传奇

Rank: 8Rank: 8

积分
5887

最佳新人活跃会员热心会员宣传达人灌水之王

10#
发表于 2022-8-31 14:26:38 | 只看该作者

   经典图书
受教了,谢谢分享!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

15

主题

322

帖子

304

金币

传奇

Rank: 8Rank: 8

积分
3897

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

11#
发表于 2022-11-3 10:11:25 | 只看该作者

谢谢楼主的讲解
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

73

帖子

7

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
207

最佳新人活跃会员热心会员宣传达人

12#
发表于 2022-11-3 10:15:05 | 只看该作者
SW机械工程师网,找到组织了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

350

帖子

427

金币

长老

Rank: 6Rank: 6Rank: 6

积分
1713

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

13#
发表于 2022-11-3 15:58:29 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

204

帖子

868

金币

传奇

Rank: 8Rank: 8

积分
3141

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

14#
发表于 2022-12-12 10:07:56 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

111

帖子

32

金币

堂主

Rank: 4

积分
518

最佳新人活跃会员热心会员宣传达人

15#
发表于 2023-11-19 08:22:10 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

很不错,顶一下!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

319

帖子

447

金币

长老

Rank: 6Rank: 6Rank: 6

积分
2686

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

16#
发表于 2023-12-8 09:32:33 | 只看该作者

   经典案例图书
都是日常被忽略的细节  跟给力
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

343

帖子

1621

金币

传奇

Rank: 8Rank: 8

积分
5262

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

17#
发表于 2023-12-11 10:30:05 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

77

帖子

293

金币

堂主

Rank: 4

积分
865

最佳新人活跃会员热心会员宣传达人

18#
发表于 2024-10-20 16:22:13 | 只看该作者

   经典案例图书
楼主太有才了,膜拜中……
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

1754

帖子

1182

金币

传奇

Rank: 8Rank: 8

积分
5912

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

19#
发表于 2024-10-24 17:29:23 | 只看该作者
楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

343

帖子

1621

金币

传奇

Rank: 8Rank: 8

积分
5262

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

20#
发表于 2024-10-25 07:42:08 | 只看该作者
谢谢 xiaocake   大佬 扫盲           
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

SOLIDWORKS 2023 机械设计从入门到精通

手机版|小黑屋| GMT+8, 2025-6-3 04:24 , Processed in 0.270047 second(s), 25 queries , Memcache On.

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

快速回复 返回顶部 返回列表