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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2960|回复: 13
打印 上一主题 下一主题

如何用VBA编写宏来获取材料的类型?

[复制链接]

15

主题

84

帖子

184

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
335
QQ
跳转到指定楼层
楼主
发表于 2016-7-9 12:33:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

   经典图书
solidworks2012的材料库里,材料都分了类,如“钢、铁、塑料、橡胶”等等,如何用VBA编写来获取材料的这些类型呢?

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

使用道具 举报

10

主题

73

帖子

90

金币

侠客

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

14

主题

80

帖子

86

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
227
QQ
板凳
发表于 2016-7-9 12:34:15 | 只看该作者

   经典图书
能说详细点么?最好能给我举个例子!谢谢
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

12

主题

75

帖子

62

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
203
QQ
地板
发表于 2016-7-9 12:35:28 | 只看该作者
參考
    Sub main()
        Dim swApp                       As SldWorks.SldWorks
        Dim swModel                     As SldWorks.ModelDoc2
        Dim swPart                      As SldWorks.PartDoc
        Dim sMatName                    As String
        Dim sMatDB                      As String
        Dim bRet                        As Boolean
       
        Set swApp = Application.SldWorks
        Set swModel = swApp.ActiveDoc
        Set swPart = swModel
        sMatName = swPart.GetMaterialPropertyName2("Default", sMatDB)
        Debug.Print "File = " & swModel.GetPathName
        Debug.Print "  Material = " & sMatName & " (" & sMatDB & ")"
    End Sub

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

使用道具 举报

11

主题

64

帖子

109

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
230
QQ
5#
发表于 2016-7-9 12:36:40 | 只看该作者

   经典案例图书
GetMaterialPropertyName2获得的是材料的名称,如“红铜”,我是希望能获得“红铜”的类别,如“其它金属”“钢”“铁”等。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

72

帖子

78

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
212
QQ
6#
发表于 2016-7-9 12:41:05 | 只看该作者
高手不露面,自己顶一下,别沉了
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

16

主题

72

帖子

108

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
273
QQ
7#
发表于 2016-7-9 12:42:10 | 只看该作者

   经典案例图书
难道SOLIDWORKS API 不能实现这个功能?
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

19

主题

78

帖子

122

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
299
QQ
8#
发表于 2016-7-9 12:42:11 | 只看该作者
你用下面代码试试
Dim swMatDB As MSXML2.DOMDocument, MatList As Variant
    Set swMatDB = New MSXML2.DOMDocument
'    材料库所存储的路径
    swMatDB.Load "Crogram FilesSOLIDWORKS CorpSOLIDWORKSlangchinese-simplifiedsldmaterialssolidworks materials.sldmat"
    Set MatList = swMatDB.getElementsByTagName("material")
    Dim MatName() As String, Mat As Variant
    ReDim MatName(MatList.Length - 1)
    For Mat = 0 To MatList.Length - 1
        MatName(Mat) = MatList.Item(Mat).parentNode.Attributes.Item(0).nodeValue
    Next Mat
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

12

主题

66

帖子

78

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
205
QQ
9#
发表于 2016-7-9 12:43:20 | 只看该作者
高手啊!
我试试
谢谢!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

18

主题

70

帖子

131

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
231
QQ
10#
发表于 2016-7-9 12:48:17 | 只看该作者

   经典图书
不好意思,您这段代码在solidworksVBA环境中运行提示“用户定义的类型未定义”,请教是什么问题?如何解决?谢谢
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

14

主题

86

帖子

81

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
259
QQ
11#
发表于 2016-7-9 12:49:28 | 只看该作者
在引用中加入

材料库文件是一种XML文件,需要引入Micosoft XML类型库来操作。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

16

主题

74

帖子

76

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
236
QQ
12#
发表于 2016-7-9 12:59:31 | 只看该作者
成功了,谢谢!
但不明白下面这句:
Set MatList = swMatDB.getElementsByTagName("material"),括号里的“material”为什么是"material"而不是其它?
下面是我编写的获取材料类别的全部代码:
Sub main()
Dim swApp                       As SldWorks.SldWorks
Dim swModel                   As SldWorks.ModelDoc2
Dim swPart                       As SldWorks.PartDoc
Dim dbs                             As Variant
Dim sMatName                As String
Dim sMatDB                      As String
Dim bRet                           As Boolean
Dim i                                   As Long
Dim matPath                    As String
Dim swMatDB                  As MSXML2.DOMDocument
Dim MatList                      As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swPart = swModel
dbs = swApp.GetMaterialDatabases
sMatName = swPart.GetMaterialPropertyName2("Default", sMatDB)
For i = 0 To UBound(dbs)
      If StrComp(LCase(Left(Right(dbs(i), Len(sMatDB) + 7), Len(sMatDB))), LCase(sMatDB)) = 0 Then
           matPath = dbs(i)
           GoTo MatTpye
      End If
Next i
MatTpye:
Set swMatDB = New MSXML2.DOMDocument
' 材料库所存储的路径
swMatDB.Load matPath
Set MatList = swMatDB.getElementsByTagName("material")
Dim MatName() As String, Mat As Variant
ReDim MatName(MatList.Length - 1)
      For Mat = 0 To MatList.Length - 1
            If MatList.Item(Mat).Attributes.Item(0).childNodes.Item(0).nodeValue = sMatName Then
                 MatName(Mat) = MatList.Item(Mat).parentNode.Attributes.Item(0).nodeValue
                 GoTo Finish
            End If
      Next Mat
Finish:
End Sub
如有不对,请批评指正,谢谢!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

51

帖子

46

金币

天使

Rank: 2Rank: 2

积分
145
QQ
13#
发表于 2016-7-9 12:59:47 | 只看该作者
2012 測試ok,謝謝分享
建議補加如下紅字,在 "即時咚
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

880

帖子

424

金币

传奇

Rank: 8Rank: 8

积分
3075

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

14#
发表于 2021-4-17 21:51:50 | 只看该作者
楼主辛苦了!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

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

手机版|小黑屋| GMT+8, 2025-5-22 18:05 , Processed in 0.520494 second(s), 24 queries , Memcache On.

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

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

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