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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

好品数字
好品数字
查看: 744|回复: 3
打印 上一主题 下一主题

跟着大神门学写VBA程序,输出特定格式文件

  [复制链接]

2

主题

89

帖子

227

金币

堂主

Rank: 4

积分
706

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

跳转到指定楼层
楼主
 楼主| 发表于 2020-12-18 07:52:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
不想总是点另存为,在选择文件类型的方式来另存文件,于是就按照论坛大神的方法编了一个VBA程序做成按钮……
如果当前文件是工程图存成DXF文件,零件存成IGS文件,装配体则弹窗询问是否要输出文件。
代码有点乱,都是跟论坛大神学习的。
代码如下:
  1. Dim swApp As Object
  2.     Dim longstatus As Long, longwarnings As Long

  3.     Sub main()

  4.     Set swApp = Application.SldWorks
  5.     Set swModel = swApp.ActiveDoc
  6.     Set Part = swModel
  7.     Set Part = swApp.ActiveDoc

  8.     '判断是否打开零件体
  9.     If swModel Is Nothing Then
  10.        MsgBox "没有打开文档!", 0 + 16 + 65536, "错误"
  11.        Exit Sub
  12.     End If

  13.     '判定当前活动文件是否是零件并赋相应扩展名变量值
  14.     If (Part.GetType = swDocPART) Then
  15.       g = "igs" '零件模式设定输出扩展名为igs,不包含"."
  16.     ElseIf Part.GetType = swDocDRAWING Then
  17.       g = "dxf" '图纸模式设定输出扩展名为dxf,不包含"."
  18.     ElseIf Part.GetType = swDocASSEMBLY Then
  19.       Msgr = MsgBox("当前为装配体,是否确定要将装配体输出文件?", 4 + 64 + 65536, "注意")
  20.         If Msgr = 6 Then
  21.           g = "igs" '设定输出扩展名为igs,不包含"."
  22.         Else
  23.           Exit Sub
  24.         End If
  25.     End If

  26.     boolstatus = Part.EditRebuild3() '刷新模型
  27.     Set swApp = Application.SldWorks
  28.     Set Part = swApp.ActiveDoc
  29.     Set SelMgr = Part.SelectionManager
  30.     swApp.ActiveDoc.ActiveView.FrameState = 1

  31.     '设定变量
  32.     a = swApp.ActiveDoc.GetTitle() '零件名Part.GetPathName
  33.     b = Part.GetPathName() '当前活动模型的完整路径和完整文件名
  34.     c = Right(a, 7) '文件名消除扩展名
  35.     d = Left(b, InStrRev(b, "")) '完整路径消除文件名
  36.     e = Left(a, InStrRev(a, ".")) '消除文件名中的扩展名
  37.     f = Chr(46) & "sldprt" '设定扩展名,不包含"."
  38.     h = Left(b, InStrRev(b, ".")) '完整路径移除扩展名

  39.     If (b = "") Then
  40.       MsgBox "当前文件还未保存," & vbCrLf & "保存文件后继续执行!", 0 + 16 + 65536, "错误"
  41.       Exit Sub
  42.     End If

  43.     PName = h & g
  44.     longstatus = Part.SaveAs3(PName, 0, 0)
  45.     MsgBox "输出文件:" & PName, 0 + 64 + 65536, "成功"

  46.     End Sub
复制代码
用了一段时间,基本没有问题。
但是还有两个问题困扰我,能解决了就完美啦。

如下图
1.当前目录有同名文件会弹窗问你是否要替换,能默认选择是就好了……


2.工程图出现有多个比例的视图时也会弹窗提醒,其实也默认确定就好了。



有这个需求的朋友可以直接复制代码,保存成Swp文件后添加到Solidworks工具栏就ok了。

有解决办法的大神,麻烦指点下,万分感谢……

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

使用道具 举报

2

主题

37

帖子

171

金币

侠客

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

37

主题

990

帖子

1万

金币

版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
19616

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

板凳
发表于 2020-12-18 17:20:10 | 只看该作者
你的SolidWorks是什么版本呢?我用你的这个代码完全没有那两个问题啊,环境是SW2017。

另外,你可以尝试一下把
  1. longstatus = Part.SaveAs3(PName, 0, 0)
复制代码

更改为
  1. longstatus = Part.SaveAs2(PName, 0, 0, 1)
复制代码
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

2

主题

89

帖子

227

金币

堂主

Rank: 4

积分
706

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

地板
 楼主| 发表于 2020-12-18 23:56:36 | 只看该作者
Allate 发表于 2020-12-18 17:20
你的SolidWorks是什么版本呢?我用你的这个代码完全没有那两个问题啊,环境是SW2017。

另外,你可以尝试 ...

我用2015,我改下试试。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-5-6 19:03 , Processed in 0.139670 second(s), 36 queries .

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

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

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