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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1202821|回复: 93
打印 上一主题 下一主题

【遍歷宏】在總裝配內零件的自定義屬性寫入配套數量(開放代碼)

  [复制链接]

88

主题

283

帖子

169

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
470
QQ
跳转到指定楼层
楼主
发表于 2014-2-8 20:47:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

   经典图书
相關討論:
SolidWorks机械工程师论坛
SolidWorks机械工程师论坛
例子“整套微型電控銑床裝配”的下載地址:
SolidWorks机械工程师论坛
經過深思熟慮,悶人從自己一直用開及冗長不堪的中精簡出以下代碼:
    Dim TopDocPathOnly As String
    Dim PartsCollect() As String '遍歷清單(陣列)
    Dim InCollectCount As Double '遍歷清單長度
    Dim CustomInfoQTY As String
    Sub main()
    Set swApp = Application.SldWorks '騷窩對象
    Set TopDoc = swApp.ActiveDoc '總裝對象
    If TopDoc.GetType  2 Then Exit Sub '不是裝配=退出
    TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
    TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '總裝文件名稱
    TopDocName = Left(TopDocName, Len(TopDocName) - 7) '總裝文件名稱(排除.SLDASM)
    TopDocPathOnly = TopDocPathSplit(UBound(TopDocPathSplit) - 1) '總裝目錄名稱
    TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱
    CustomInfoQTY = InputBox("自定義屬性名稱", "遍歷" & TopDocName, "用於" & TopDocName & "的數量") '可按個人喜好修改預設值
    If CustomInfoQTY = "" Then Exit Sub '按下取消離開
    InCollectCount = 1 '遍歷清單長度基數
    ReDim PartsCollect(InCollectCount) '定義陣列項數
    SubAsm TopDoc, TopConfString '遍歷
    End Sub
    Function SubAsm(AsmDoc, ConfString)
    Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
    Set RootComponent = Configuration.GetRootComponent
    Components = RootComponent.GetChildren
    For Each Child In Components
    Set ChildModel = Child.GetModelDoc
    If Not (ChildModel Is Nothing) Then '排除抑制及輕化
    ChildConfString = Child.ReferencedConfiguration '零件配置名稱
    ChildType = ChildModel.GetType
    If ChildType = 2 Then
    SubAsm ChildModel, ChildConfString '如果是裝配則向下遍歷
    Else
    ChildPathSplit = Split(Child.GetPathName, "") '分割
    ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名稱
    ChildPathOnly = ChildPathSplit(UBound(ChildPathSplit) - 1) '零件目錄名稱
    If ChildPathOnly = TopDocPathOnly Then SamePath = True Else SamePath = False '是否在總裝目錄
    If SamePath And (Not Child.ExcludeFromBOM) And (Not Child.IsEnvelope) Then '跳過:不在總裝目錄 及 不包括在材料明細表中 及 封套
    UNIT_OF_MEASURE_Name = ChildModel.CustomInfo2(ChildConfString, "UNIT_OF_MEASURE") '備用量屬性名稱
    UNIT_OF_MEASURE = ChildModel.CustomInfo2(ChildConfString, UNIT_OF_MEASURE_Name) '備用量
    If (UNIT_OF_MEASURE = 0) Or (UNIT_OF_MEASURE = "") Then UNIT_OF_MEASURE = 1 '備用量除錯
    inCollect = False '重置判斷變量
    For Each PartinCollect In PartsCollect '判斷是否已在遍歷清單內
    If ChildConfString & "@" & ChildName = PartinCollect Then inCollect = True
    Next
    If inCollect Then '已在遍歷清單內
    ht_Qty = ChildModel.CustomInfo2(ChildConfString, CustomInfoQTY) + 1 * UNIT_OF_MEASURE
    ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, ht_Qty
    Else '不在遍歷清單內(首次處理)
    ChildModel.DeleteCustomInfo2 ChildConfString, CustomInfoQTY
    ChildModel.AddCustomInfo3 ChildConfString, CustomInfoQTY, 30, UNIT_OF_MEASURE
    InCollectCount = InCollectCount + 1
    ReDim Preserve PartsCollect(InCollectCount) '重新定義陣列項數(保留內含數據)
    PartsCollect(InCollectCount - 1) = ChildConfString & "@" & ChildName '加入到遍歷清單中
    ChildModel.SetUserPreferenceIntegerValue swUnitsMassPropMass, swUnitsMassPropMass_Kilograms '單位設定為kg(可按喜好加入設定)
    End If
    End If
    End If
    End If
    Next
    End Function

复制代码
<font size="6"><strong><font color="Red">鄭重聲明:此不存在實時關聯,只是一次性的程序,倘若修改設計後,必須再咝幸淮巍
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 转播转播 分享教程|习题|模型|技巧 点赞点赞12614 拍砖拍砖3310
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

11

主题

220

帖子

20

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
256
QQ
沙发
发表于 2014-2-8 20:47:40 | 只看该作者
这个问题两个论坛讨论挺热烈,先学习学习大侠的技巧。
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

8

主题

214

帖子

8

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
228
QQ
板凳
发表于 2014-2-8 20:47:50 | 只看该作者

   经典图书
裝配體直觀功能的確不錯,但是會連同“封套”及“不包括在材料明細表中”的零件都一併計算,又沒有計算到“備用量”,出來的數量可能存在偏差。
甚麼是“備用量”呢?就是在自定義屬性中加上一個指定的倍數,可以用一個零件代表多個零件的方法。
相關討論:
SolidWorks机械工程师论坛
以下例子中,『機腳』容易在咻敃r損壞,改為到現場才安裝又會出現跌丟的情況,由於不是標準件,一旦遺失或損壞,就要工場重做,頗為麻煩。只要在『機腳』零件加上相應的自定義屬性,BOM內的數量就會自動乘以這個倍數,例子的倍數是2,『機腳』數量就是8件了。不難發現,裝配體直觀功能是不會計算這個倍數的。


SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

15

主题

221

帖子

27

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
267
QQ
地板
发表于 2014-2-8 20:48:22 | 只看该作者
以下例子,
『110903-Ceiling_』只是吊頂的示意,
『110903-Ceiling_#』用來關聯數據,
兩者均從BOM排除了,但在“裝配體直觀”中依然存在數量。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

221

帖子

20

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
241
5#
发表于 2014-2-8 20:49:13 | 只看该作者

   经典案例图书
操作過程。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

226

帖子

12

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
268
QQ
6#
发表于 2014-2-8 20:49:24 | 只看该作者
來頂頂工程师的帖子,偶先去細細閱讀相關帖子先……
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

16

主题

227

帖子

41

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
284
QQ
7#
发表于 2014-2-8 20:49:31 | 只看该作者

   经典案例图书
认真学习,谢谢大侠  
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

11

主题

237

帖子

32

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
270
8#
发表于 2014-2-8 20:49:36 | 只看该作者
感谢大侠无私奉献
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

230

帖子

24

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
268
QQ
9#
发表于 2014-2-8 20:49:39 | 只看该作者
感谢大侠无私奉献
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

245

帖子

42

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
293
QQ
10#
发表于 2014-2-8 20:50:09 | 只看该作者

   经典图书
回复后再学习,谢大侠分享。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

13

主题

253

帖子

1

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
297

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

QQ
11#
发表于 2014-2-8 20:50:10 | 只看该作者
謝謝分享,研習了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

15

主题

234

帖子

30

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
278
QQ
12#
发表于 2014-2-8 20:50:14 | 只看该作者
感谢分享,测试下
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

224

帖子

19

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
243
13#
发表于 2014-2-8 20:50:28 | 只看该作者
新年第一贴,谢大侠分享
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

215

帖子

17

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
245
QQ
14#
发表于 2014-2-8 20:50:33 | 只看该作者
学习~~~~~~~~~~~
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

16

主题

256

帖子

34

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
309
QQ
15#
发表于 2014-2-8 20:50:42 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

感谢大侠回复,期待教程
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

231

帖子

31

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
282
QQ
16#
发表于 2014-2-8 20:50:43 | 只看该作者

   经典案例图书
刪除下圖紅框中的代碼,就可以一併處理不同文件夾的零件。

修改下圖籃框中的代碼,就可以更貼切自身的素求。

ps:文件夾=目錄,一般在硬盤的文件夾悶人都會叫做“目錄”,以避免混淆特徵樹的“文件夾”。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

16

主题

238

帖子

36

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
291
QQ
17#
发表于 2014-2-8 20:50:48 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

多谢大侠分享,学习一下。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

3

主题

229

帖子

18

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
272
QQ
18#
发表于 2014-2-8 20:50:48 | 只看该作者

   经典案例图书
再一次表示感谢。按大侠指导,成功!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

247

帖子

19

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
287
QQ
19#
发表于 2014-2-8 20:51:57 | 只看该作者
木瓜老兄绝对是高人,一会儿美女一会儿骷髅的
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

233

帖子

33

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
287
QQ
20#
发表于 2014-2-8 20:52:04 | 只看该作者
谢谢分享好源码,确实能解决非常复杂的问题,
收藏学习了。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

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

手机版|小黑屋| GMT+8, 2025-7-18 05:55 , Processed in 4.049196 second(s), 25 queries , Memcache On.

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

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

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