看前方 发表于 3 天前

faker558 发表于 2024-11-21 16:35
在开元没有看到这个功能啊

有的呀,BOM工具里面
我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟插件的数量对比,如果不一样,就改成和插件统计的一样,这样零件属性里面就有数量了

faker558 发表于 3 天前

本帖最后由 faker558 于 2024-11-21 20:44 编辑

看前方 发表于 2024-11-21 19:55
有的呀,BOM工具里面
我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟 ...
感谢楼主,找到了。但是是付费项目:L,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定义属性里也没变化,没有自动写入数量,有什么注意事项吗

李邈 发表于 前天 08:08

土豆土豆442 发表于 2024-10-7 16:38
楼主,能求个宏吗?不会搞

一楼就是

李邈 发表于 前天 08:08

faker558 发表于 2024-11-21 16:36
刷个威望下附件

就怕你威望不够,代码都给你了

看前方 发表于 前天 08:48

faker558 发表于 2024-11-21 20:34
感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定 ...

那个宏不是我写的,我没有用宏
我截的那个图里面,前面那个总数量就是插件统计的,但是那个数量写不到零件属性里面,所以我在后面加了一个数量的项,这个项是可以链接到零件属性里面去的。然后按照插件统计的总数量手动填上去,零件数量上就有显示了

faker558 发表于 前天 11:30

李邈 发表于 2024-11-22 08:08
就怕你威望不够,代码都给你了

楼主,我用了你那个宏,怎么属性列表里的数量没有变化

faker558 发表于 前天 11:31

李邈 发表于 2024-11-22 08:08
就怕你威望不够,代码都给你了

压缩包的我试了,复制代码也试了

hdgd501 发表于 前天 11:49

感谢楼主分享,很不错!
楼主辛苦了!

faker558 发表于 前天 11:49

李邈 发表于 2024-11-22 08:08
就怕你威望不够,代码都给你了

十分感谢楼主,可以用了,我的SW版本是2020,把库改成2020就可以用了,十分感谢:lol

faker558 发表于 前天 11:58

我用手机助手写了一个宏程序,不知道为什么用不了,语法错误,楼主可以帮忙看看吗
以下是一个用于SolidWorks(SW)的向装配体里面写入零件总数量的宏的示例。此宏使用VBA(Visual Basic for Applications)编写,可以在SolidWorks的宏环境中运行。请按照以下步骤操作:

1. 打开SolidWorks并启用宏环境4:
确保你的SolidWorks已经安装了VBA宏支持。
打开SolidWorks,并启用宏录制和运行功能(通常在“工具”或“选项”菜单中可以找到)。
2. 编写宏代码:
 
Dim swApp As SldWorks.SldWorks
Dim swAssy As SldWorks.AssemblyDoc
Dim swComp As SldWorks.Component2
Dim vComps As Variant
Dim i As Long, totalQty As Long
Dim customPropMgr As SldWorks.CustomPropertyManager
Dim customPropName As String

' 初始化SolidWorks应用程序对象
Set swApp = Application.SldWorks

' 获取当前活动的装配体文档
Set swAssy = swApp.ActiveDoc

' 检查是否为装配体文档
If swAssy Is Nothing Or swAssy.GetType <> swDocASSEMBLY Then
    MsgBox "请打开一个装配体文档。", vbExclamation
    Exit Sub
End If

' 初始化零件总数量
totalQty = 0

' 自定义属性名称,用于存储零件总数量
customPropName = "TotalQty"

' 遍历装配体中的所有组件
With swAssy.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
    Set vComps = .GetChildren
    If Not IsEmpty(vComps) Then
      For i = 0 To UBound(vComps)
            Set swComp = vComps(i)

            ' 检查组件是否被抑制,如果没有被抑制,则计入总数
            If swComp.GetSuppression() = swComponentSuppression_e.swComponentNotSuppressed Then
                ' 如果组件是零件,则数量加1
                If swComp.GetType = swDocPART Then
                  totalQty = totalQty + 1
                ElseIf swComp.GetType = swDocASSEMBLY Then
                  ' 如果组件是子装配体,则递归计算子装配体中的零件数量
                  ' 这里为了简化示例,不递归计算子装配体中的零件数量
                  ' 你可以根据需要添加递归函数来处理子装配体
                End If
            End If
      Next i
    End If
End
With
' 创建或更新自定义属性以存储零件总数量
Set customPropMgr = swAssy.Extension.CustomPropertyManager("")
customPropMgr.Add2 customPropName, "系统", CStr(totalQty), swCustomPropertyInfo_e.swCustomPropText
' 注意:如果属性已存在,Add2 方法会更新其值,而不是创建新属性。
' 如果你想要确保属性总是被更新(即使值没有变化),可以使用Set2方法代替Add2。

' 清理对象
Set swComp = Nothing
Set swAssy = Nothing
Set swApp = Nothing

' 提示用户操作完成
MsgBox "零件总数量已写入到自定义属性 """ & customPropName & """ 中,总数为:" & totalQty, vbInformation
 
3. 运行宏4:
在SolidWorks中,打开一个装配体文档。
通过宏管理器(通常在“工具”菜单下)找到并运行你编写的宏。
4. 验证结果:
运行宏后,你应该会在装配体的自定义属性中找到一个名为“TotalQty”的属性,其值应该等于装配体中零件的总数量。
**注意事项 **:
此宏仅计算装配体中的顶层零件数量,不包括子装配体中的零件数量。如果你需要计算包括子装配体在内的所有零件数量,你需要添加递归函数来处理子装配体。
在运行宏之前,请确保你的SolidWorks文档没有未保存的更改,以防宏运行过程中发生意外导致数据丢失。
宏代码中的错误处理部分可以根据你的需求进行扩展和完善,以提高宏的健壮性和可靠性。
页: 1 2 [3] 4
查看完整版本: SW宏-零件数量自动写入自定义属性表