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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 837|回复: 4
打印 上一主题 下一主题

麻烦哪位大佬指证一下代码错误

  [复制链接]

3

主题

83

帖子

73

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
413

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

跳转到指定楼层
楼主
 楼主| 发表于 5 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

   经典图书
下面的宏代码用于在配置特定中自动生成项目号一栏,当文件名格式为E2401A000000000 零件,文件号的前6号代表了项目号,E为项目属性,24为年代号,代表2024年,01为项目序号,代表24年第一个项目号,A代表设备数量,A表示此项目只有一台设备,如果是B就表示此项目有两台设备,当项目只有一台设备时项目号格式就是E2024-01-1,最后的-1省略不做,项目号即为E2024-01。当项目有两台的设备时,文件名为E2401B000000000 零件,项目号就需要在最后加写上与B对应的-2,即项目号为E2024-01-2。


宏运行时提示用户定义类型未定义


  1. Sub SetProjectNumberFromFileName()  
  2.     Dim swApp As SldWorks.SldWorks  
  3.     Dim Part As SldWorks.ModelDoc2  
  4.     Dim custPropMgr As SldWorks.CustomPropertyManager  
  5.     Dim fileName As String  
  6.     Dim filePath As String  
  7.     Dim projectCode As String  
  8.     Dim projectYear As String  
  9.     Dim projectNumber As String  
  10.     Dim deviceCount As String  
  11.     Dim finalProjectNumber As String  
  12.       
  13.     ' 获取SolidWorks应用程序对象  
  14.     Set swApp = Application.SldWorks  
  15.       
  16.     ' 检查是否有活动文档  
  17.     If swApp.ActiveDoc Is Nothing Then  
  18.         MsgBox "没有打开的文档", vbExclamation  
  19.         Exit Sub  
  20.     End If  
  21.       
  22.     ' 获取活动文档  
  23.     Set Part = swApp.ActiveDoc  
  24.       
  25.     ' 确保是零件文档  
  26.     If Not TypeOf Part Is SldWorks.ModelDoc2 Then  
  27.         MsgBox "当前文档不是零件文档", vbExclamation  
  28.         Exit Sub  
  29.     End If  
  30.       
  31.     ' 获取文件名和路径  
  32.     filePath = Part.GetPathName  
  33.     fileName = Dir(filePath)  
  34.       
  35.     ' 提取项目号信息  
  36.     ' 假设文件名格式为 "E2401A000000000 零件.sldprt" 或 "E2401B000000000 零件.sldprt"  
  37.     projectCode = Left(fileName, 7) ' 提取前7个字符  
  38.     projectYear = Mid(projectCode, 2, 2) ' 提取年份后两位  
  39.     projectYear = "20" & projectYear ' 转换为完整的年份格式  
  40.     projectNumber = Mid(projectCode, 4, 2) ' 提取项目序号  
  41.     deviceCount = Mid(projectCode, 7, 1) ' 提取设备数量标识  
  42.       
  43.     ' 根据设备数量格式化最终的项目号  
  44.     If deviceCount = "A" Then  
  45.         finalProjectNumber = "E" & projectYear & "-" & projectNumber  
  46.     ElseIf deviceCount = "B" Then  
  47.         finalProjectNumber = "E" & projectYear & "-" & projectNumber & "-2"  
  48.     Else  
  49.         MsgBox "无法识别的设备数量标识:" & deviceCount, vbExclamation  
  50.         Exit Sub  
  51.     End If  
  52.       
  53.     ' 获取特定配置的自定义属性管理器  
  54.     ' 注意:这里假设我们操作的是默认配置,如果要针对特定配置,需要额外处理  
  55.     Set custPropMgr = Part.Extension.CustomPropertyManager("") ' 空字符串表示默认配置  
  56.       
  57.     ' 尝试设置或更新项目号自定义属性  
  58.     Dim errCode As Long  
  59.     errCode = custPropMgr.Add2("项目号", finalProjectNumber, swCustomInfo_ConfigurationSpecific, swCustPropertyTypeText, "")  
  60.       
  61.     ' 如果属性已存在,则更新它  
  62.     If errCode = swCustomPropertyInfo_AlreadyExists Then  
  63.         errCode = custPropMgr.Edit2("项目号", finalProjectNumber, swCustomInfo_ConfigurationSpecific, swCustPropertyTypeText)  
  64.     End If  
  65.       
  66.     ' 检查是否有错误  
  67.     If errCode <> 0 And errCode <> swCustomPropertyInfo_AlreadyExists Then  
  68.         MsgBox "设置自定义属性时出错:" & errCode, vbExclamation  
  69.     Else  
  70.         MsgBox "项目号已成功设置为:" & finalProjectNumber, vbInformation  
  71.     End If  
  72.       
  73.     ' 清理  
  74.     Set custPropMgr = Nothing  
  75.     Set Part = Nothing  
  76.     Set swApp = Nothing  
  77. End Sub
复制代码


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

使用道具 举报

3

主题

1340

帖子

286

金币

传奇

Rank: 8Rank: 8

积分
4709

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

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

使用道具 举报

9

主题

303

帖子

572

金币

VIP特别用户组

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
2876

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

板凳
发表于 4 天前 | 只看该作者

   经典图书
那一句报错?
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

3

主题

83

帖子

73

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
413

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

地板
 楼主| 发表于 4 天前 | 只看该作者
已经解决了,我把图号分离的代码与上面项目号的代码合在一起了,现在可能实现项目号、图号、名称根据文件名进行自动填写,下一步准备解决根据文件名自动识别填写材料号、焊接件、组件及部件
  1. Dim a As Integer

  2. Dim b As String

  3. Dim m As String

  4. Dim e As String

  5. Dim k As String

  6. Dim t As String

  7. Dim c As String

  8. Dim j As Integer

  9. Dim strmat As String

  10. Dim tempvalue As String

  11. Dim Part As SldWorks.ModelDoc2

  12. Dim swApp As SldWorks.SldWorks

  13. Dim swModelDoc As SldWorks.ModelDoc2

  14. Dim swConfig As SldWorks.Configuration

  15. Dim CustPropMgr As SldWorks.CustomPropertyManager

  16. Dim swModel As SldWorks.ModelDoc2
  17.     Dim projectCode As String
  18.     Dim projectYear As String
  19.     Dim projectNumber As String
  20.     Dim deviceCount As String
  21.     Dim finalProjectNumber As String
  22.     Dim fileName As String
  23.     Dim filePath As String

  24. Sub main()

  25. Set swApp = Application.SldWorks

  26. Set swModelDoc = swApp.ActiveDoc

  27. Set swConfig = swModelDoc.ConfigurationManager.ActiveConfiguration

  28. Set swModel = swApp.ActiveDoc

  29. Set CustPropMgr = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguration.Name)

  30. '设定变量

  31. c = swApp.ActiveDoc.GetTitle() '零件名

  32. strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34)

  33. a = InStr(c, " ") - 1 '重点:分隔标识符,这里是一个空格,也可换成其他符号

  34. If a > 0 Then

  35. k = Left(c, a)

  36. t = Left(LTrim(e), 3)

  37. If t = "GBT" Then

  38. e = "GB/T" + Mid(k, 4)

  39. Else

  40. e = k

  41. End If

  42. b = Mid(c, a + 2)

  43. t = Right(c, 7)

  44. If t = ".SLDPRT" Or t = ".SLDASM" Or t = ".sldprt" Or t = ".sldasm" Then

  45. j = Len(b) - 7

  46. Else

  47. j = Len(b)

  48. End If

  49. m = Left(b, j)

  50. End If

  51.    
  52. ' 获取SolidWorks应用程序对象
  53.     Set swApp = Application.SldWorks
  54.       
  55.     ' 检查是否有活动文档
  56.     If swApp.ActiveDoc Is Nothing Then
  57.         MsgBox "没有打开的文档", vbExclamation
  58.         Exit Sub
  59.     End If
  60.       
  61.     ' 获取活动文档
  62.     Set Part = swApp.ActiveDoc
  63.       
  64.     ' 确保是零件文档
  65.     If Not TypeOf Part Is SldWorks.ModelDoc2 Then
  66.         MsgBox "当前文档不是零件文档", vbExclamation
  67.         Exit Sub
  68.     End If
  69.    
  70. ' 获取文件名和路径
  71.     filePath = Part.GetPathName
  72.     fileName = Dir(filePath)

  73. ' 提取项目编号信息
  74.     ' 假设文件名格式为 "E2401A000000000 零件.sldprt" 或 "E2401B000000000 零件.sldprt"
  75.     projectCode = Left(fileName, 7) ' 提取前7个字符
  76.     projectYear = Mid(projectCode, 2, 2) ' 提取年份后两位
  77.     projectYear = "20" & projectYear ' 转换为完整的年份格式
  78.     projectNumber = Mid(projectCode, 4, 2) ' 提取项目序号
  79.     deviceCount = Mid(projectCode, 6, 1) ' 提取设备数量标识
  80.    
  81. ' 根据设备数量格式化最终的项目编号
  82.     If deviceCount = "A" Then
  83.         finalProjectNumber = "E" & projectYear & "-" & projectNumber
  84.     ElseIf deviceCount = "B" Then
  85.         finalProjectNumber = "E" & projectYear & "-" & projectNumber & "-2"
  86.     ElseIf deviceCount = "C" Then
  87.         finalProjectNumber = "E" & projectYear & "-" & projectNumber & "-3"
  88.     ElseIf deviceCount = "D" Then
  89.         finalProjectNumber = "E" & projectYear & "-" & projectNumber & "-4"
  90.     ElseIf deviceCount = "E" Then
  91.         finalProjectNumber = "E" & projectYear & "-" & projectNumber & "-5"
  92.     ElseIf deviceCount = "F" Then
  93.         finalProjectNumber = "E" & projectYear & "-" & projectNumber & "-6"
  94.     ElseIf deviceCount = "G" Then
  95.         finalProjectNumber = "E" & projectYear & "-" & projectNumber & "-7"
  96.     ElseIf deviceCount = "H" Then
  97.         finalProjectNumber = "E" & projectYear & "-" & projectNumber & "-8"
  98.     ElseIf deviceCount = "I" Then
  99.         finalProjectNumber = "E" & projectYear & "-" & projectNumber & "-9"
  100.     Else
  101.         MsgBox "无法识别的设备数量标识:" & deviceCount, vbExclamation
  102.         Exit Sub
  103.     End If
  104. '删除原有
  105. CustPropMgr.Delete ("项目编号")

  106. CustPropMgr.Delete ("代号")

  107. CustPropMgr.Delete ("名称")

  108. '新增

  109. CustPropMgr.Add2 "项目编号", swCustomInfoText, finalProjectNumber

  110. CustPropMgr.Add2 "代号", swCustomInfoText, e

  111. CustPropMgr.Add2 "名称", swCustomInfoText, m



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

使用道具 举报

0

主题

10

帖子

20

金币

混混

Rank: 1

积分
48
QQ
5#
发表于 3 天前 | 只看该作者

   经典案例图书
好东西,努力学习学习!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭 卷起
关闭 卷起

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

手机版|小黑屋| GMT+8, 2024-9-29 00:21 , Processed in 0.189118 second(s), 18 queries , Memcache On.

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

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

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