iCAx开思网

标题: (宏) 重命名工程图图纸名称 [打印本页]

作者: wutong490    时间: 2014-9-5 15:52
标题: (宏) 重命名工程图图纸名称
本帖最后由 wutong490 于 2014-9-5 20:44 编辑

前段时间发现SW的另存PDF很好用,于是现在一直把工程图另存为PDF。
为了查阅方便需要把图纸名称改为零件名称,很机械的动作。
这两天看到闷大的獨孤九劍-第二十式:《萬劍朝宗》,只有仰视
找遍资料写了个可以把图纸名称改为零件名称的宏。现在还有缺陷,多张图纸的时候,只有第一次执行才有效果。
还请大家帮忙改改。

  1. Dim swApp As Object
  2. Dim Part As Object
  3. Dim myDrawingSheet As Object
  4. Sub main()
  5. Set swApp = Application.SldWorks
  6. Set Part = swApp.ActiveDoc
  7. Set swModel = swApp.GetFirstDocument
  8. path_name = swModel.GetPathName
  9. Name = swModel.GetTitle()
  10. Set myDrawingSheet = Part.GetCurrentSheet()
  11. myDrawingSheet.SetName Name
  12. End Sub
复制代码

作者: Francis    时间: 2014-9-5 22:00
  1. Dim PathName As String
  2. Dim SheetName() As String
  3. Dim ConfigName As String
  4. Dim SplittedPathName() As String
  5. Dim ModelName As String

  6. Sub main()
  7. Set swapp = Application.SldWorks
  8. Set drawing = swapp.ActiveDoc
  9. If drawing.GetType <> 3 Then Exit Sub
  10. SheetName = drawing.GetSheetNames
  11. SheetCount = drawing.GetSheetCount
  12. For i = 0 To SheetCount - 1
  13.     drawing.ActivateSheet SheetName(i)
  14.     Set swSheet = drawing.GetCurrentSheet
  15.     swSheet.SetName "$$$$$$" & i
  16. Next
  17. SheetName = drawing.GetSheetNames
  18. For i = 0 To SheetCount - 1
  19.     drawing.ActivateSheet SheetName(i)
  20.     Set swView = drawing.GetFirstView.GetNextView
  21.     PathName = swView.GetReferencedModelName
  22.     ConfigName = swView.ReferencedConfiguration
  23.     SplittedPathName = Split(PathName, "")
  24.     ModelName = SplittedPathName(UBound(SplittedPathName))
  25.     ModelName = Left(ModelName, Len(ModelName) - 7)
  26.     Set swSheet = drawing.GetCurrentSheet
  27.     swSheet.SetName ModelName & ":" & ConfigName
  28. Next
  29. SheetName = drawing.GetSheetNames
  30. drawing.ActivateSheet SheetName(0)
  31. End Sub
复制代码
試下這段代碼.
作者: wutong490    时间: 2014-9-5 22:23
Francis 发表于 2014-9-5 22:00
試下這段代碼.

非常感谢
测试了 很好用
作者: wutong490    时间: 2014-9-5 22:38
Francis 发表于 2014-9-5 22:00
試下這段代碼.

"$$$$$$" & i
闷人思维缜密

作者: 牙G夜    时间: 2014-9-6 09:44
Francis 发表于 2014-9-5 22:00
試下這段代碼.

厉害,只能仰望。

作者: jackdo    时间: 2014-9-8 21:01
找不出有什么毛病呀。。
作者: gg555gg555    时间: 2014-9-24 08:19
谢谢各位版大,分享
作者: ac250626    时间: 2014-11-30 16:59
楼主这个怎么设置的啊
[attach]1211637[/attach]


作者: wutong490    时间: 2014-11-30 17:50
ac250626 发表于 2014-11-30 16:59
楼主这个怎么设置的啊

请在工程图状态下实用  2楼闷大的宏

作者: ac250626    时间: 2014-12-1 08:21
Francis 发表于 2014-9-5 22:00
試下這段代碼.

这个是怎么回事啊焖大侠
到这里就不行了,[attach]1211659[/attach]

[attach]1211660[/attach]

作者: gt.adan    时间: 2014-12-1 08:46
謝謝悶大的教程~~
作者: gt.adan    时间: 2014-12-1 11:01
wutong490 发表于 2014-9-5 22:38
"$$$$$$" & i
闷人思维缜密

悶大思維確實縝密,一併考慮到了零件名稱及配置,
再搭配另存PDF或是DWG的代碼,工作上真的方便許多~~

作者: 大鹿    时间: 2014-12-1 11:05
ac250626 发表于 2014-12-1 08:21
这个是怎么回事啊焖大侠
到这里就不行了,

没看到9楼梧桐版主的回复吗?

作者: wutong490    时间: 2014-12-1 11:14
本帖最后由 wutong490 于 2014-12-1 11:16 编辑
gt.adan 发表于 2014-12-1 11:01
悶大思維確實縝密,一併考慮到了零件名稱及配置,
再搭配另存PDF或是DWG的代碼,工作上真的方便許多~~

我遇到一种情况:
一个形状复杂的零件需要多张工程图支持的时候
这时还需要加入例如页码 之类的参数,才能区分。

(12版SW对于分页图纸的名称长度有限制,当名称太长的时候 ,修改图纸比例就会提示图纸名称太长)


作者: gt.adan    时间: 2014-12-1 11:42
wutong490 发表于 2014-12-1 11:14
我遇到一种情况:
一个形状复杂的零件需要多张工程图支持的时候
这时还需要加入例如页码 之类的参数, ...

不知道梧桐的零件有多複雜…分頁名稱又有多長?
我執行的結果如下,並沒有問題。能否貼圖討論一下?

[attach]1211675[/attach]

作者: wutong490    时间: 2014-12-1 13:24
gt.adan 发表于 2014-12-1 11:42
不知道梧桐的零件有多複雜…分頁名稱又有多長?
我執行的結果如下,並沒有問題。能否貼圖討論一下?

1. 纯手工输入的结果见下图
[attach]1211688[/attach]
如果是宏修改的话,这个长度可以更长。但是修改就会遇到提示名称过长

2.零件的复杂程度: 一个稍复杂点的阀岛,上面需要安装十几个不同功能的阀,有各种图示,各种贯穿与不贯穿的孔……
   一张图纸是不能表达清楚的,这时一个零件就需要多张图纸去表达。(当然也可以做成多种配置,出多张工序图)



作者: gt.adan    时间: 2014-12-1 14:44
wutong490 发表于 2014-12-1 13:24
1. 纯手工输入的结果见下图

如果是宏修改的话,这个长度可以更长。但是修改就会遇到提示名称过长

現在才看懂梧桐的要求…
是要在分頁更名後再加上頁碼,例如:4x112 nylon wheel:6002 bearing-1 這樣的意思嗎?
                                                            4x112 nylon wheel:6002 bearing-2

作者: wutong490    时间: 2014-12-1 15:06
gt.adan 发表于 2014-12-1 14:44
現在才看懂梧桐的要求…
是要在分頁更名後再加上頁碼,例如:4x112 nylon wheel:6002 bearing-1 這樣的 ...

是这个意思
俺的表达很有待改进{:soso_e113:}。(俺的交流太少了,导致表达能力太差了)

作者: Francis    时间: 2014-12-1 15:07
wutong490 发表于 2014-12-1 13:24
1. 纯手工输入的结果见下图

如果是宏修改的话,这个长度可以更长。但是修改就会遇到提示名称过长

配合“同一模型以多頁解說”的代碼如下:(還加上了8樓的渴求及避開一些默認字眼。)
  1. Dim PathName As String
  2. Dim SheetName() As String
  3. Dim ConfigName As String
  4. Dim SplittedPathName() As String
  5. Dim ModelName As String

  6. Sub main()
  7. Set swApp = Application.SldWorks
  8. Set drawing = swApp.ActiveDoc
  9. If drawing Is Nothing Then
  10.     MsgBox "阁下是一位小白!"
  11.     Exit Sub
  12. End If
  13. If drawing.GetType <> 3 Then Exit Sub
  14. SheetName = drawing.GetSheetNames
  15. SheetCount = drawing.GetSheetCount
  16. For i = 0 To SheetCount - 1
  17.     drawing.ActivateSheet SheetName(i)
  18.     Set swSheet = drawing.GetCurrentSheet
  19.     swSheet.SetName "$$" & i
  20. Next
  21. SheetName = drawing.GetSheetNames
  22. For i = 0 To SheetCount - 1
  23.     drawing.ActivateSheet SheetName(i)
  24.     Set swView = drawing.GetFirstView.GetNextView
  25.     PathName = swView.GetReferencedModelName
  26.     ConfigName = swView.ReferencedConfiguration
  27.     SplittedPathName = Split(PathName, "")
  28.     ModelName = SplittedPathName(UBound(SplittedPathName))
  29.     ModelName = Left(ModelName, Len(ModelName) - 7)
  30.     Set swSheet = drawing.GetCurrentSheet
  31.     If ConfigName = "Default" Or ConfigName = "默认" Or ConfigName = "預設" Then
  32.         ThisSheetName = ModelName
  33.     Else
  34.         ThisSheetName = ModelName & ">>" & ConfigName
  35.     End If
  36.     swSheet.SetName ThisSheetName
  37.     CurrentSheetName = swSheet.GetName
  38.     c = 1
  39.     While CurrentSheetName <> ThisSheetName
  40.         ThisSheetName = ThisSheetName & ":" & c
  41.         swSheet.SetName ThisSheetName
  42.         CurrentSheetName = swSheet.GetName
  43.         c = c + 1
  44.     Wend
  45. Next
  46. SheetName = drawing.GetSheetNames
  47. drawing.ActivateSheet SheetName(0)
  48. End Sub
复制代码

ps:同一模型的意思是:相同檔案名稱及相同的模型組態(配置)。


作者: gt.adan    时间: 2014-12-1 15:37
Francis 发表于 2014-12-1 15:07
配合“同一模型以多頁解說”的代碼如下:(還加上了8樓的渴求及避開一些默認字眼。)

ps:同一模型的 ...

謝謝悶哥!這個宏好使的!{:soso_e179:}
如果無配置就添加「頁碼」,分頁名稱=零件名稱+頁碼
如果有配置就添加配罝名稱,分頁名稱=零件名稱+配置名稱

好人性化,好方便~~~

作者: cendepeng    时间: 2014-12-10 19:53
看到这里想问一下,有时候需要把己经出完工程图的零件改名,如何才能用宏实现,当对零件重命名时,这个零件的工程图也随着一块改名保存呢?零件名和工程图名字一致。
作者: gt.adan    时间: 2014-12-11 11:20
cendepeng 发表于 2014-12-10 19:53
看到这里想问一下,有时候需要把己经出完工程图的零件改名,如何才能用宏实现,当对零件重命名时,这个零件 ...

單純的批量修改檔案名稱,請參考悶大教程:

https://www.icax.org/thread-952516-1-1.html

作者: api163    时间: 2014-12-27 13:07
改为与零件相同
作者: wxg263    时间: 2015-7-9 20:43
Francis 发表于 2014-12-1 15:07
配合“同一模型以多頁解說”的代碼如下:(還加上了8樓的渴求及避開一些默認字眼。)

ps:同一模型的 ...

闷大 此代码实在厉害,今天试下无可挑剔
作者: cc23182850    时间: 2015-11-21 14:05
试用了非常好用
但是有个小问题
如果页码有3页或者以上
重命名后是以下结果
零件名+1
零件名+1+2
零件名+1+2+3

而不是
零件名+1
零件名+2
零件名+3
作者: jj420429625    时间: 2017-6-4 10:35
Francis 发表于 2014-12-1 15:07
配合“同一模型以多頁解說”的代碼如下:(還加上了8樓的渴求及避開一些默認字眼。)

ps:同一模型的 ...

闷大,本人使用SW2016版,测试结果图纸名称变成了完整的路径,如何修改代码,只显示文件名呢,望闷大抽空赐教


作者: jj420429625    时间: 2017-6-4 10:48
jj420429625 发表于 2017-6-4 10:35
闷大,本人使用SW2016版,测试结果图纸名称变成了完整的路径,如何修改代码,只显示文件名呢,望闷大抽空 ...

已解决,只要加个“\”就好了

作者: xk15c    时间: 2017-6-6 17:13
哎,看不懂宏是怎么回事啊,都不知道从哪里入门
作者: 岁寒叁友    时间: 2017-6-18 23:40
jj420429625 发表于 2017-6-4 10:48
已解决,只要加个“\”就好了

在那个位置加的  我也是这种情况

作者: sxl_sxl    时间: 2017-7-19 22:00
岁寒叁友 发表于 2017-6-18 23:40
在那个位置加的  我也是这种情况

SplittedPathName = Split(PathName, "")在引号里面加\

作者: xtw77wh    时间: 2017-8-1 12:10
贴出全部代码,方便大家学习,太好 了。感谢分享。
作者: gdzsh    时间: 2017-8-1 16:00
对多页工程图,我只想改图纸排列序号,因为在出工程图的时候会把相关的工程图调整在一起,这样排列序号就乱了,请问这么修改为只改序号呢,我运行这宏看前面有序号重排的功能
作者: gdzsh    时间: 2017-8-1 16:04
搞定了,这个SSSSSS符号这么换成中文呢?
作者: gdzsh    时间: 2017-8-1 16:06
Dim PathName As String
Dim SheetName() As String
Dim ConfigName As String
Dim SplittedPathName() As String
Dim ModelName As String

Sub main()
Set swApp = Application.SldWorks
Set drawing = swApp.ActiveDoc
If drawing.GetType <> 3 Then Exit Sub
SheetName = drawing.GetSheetNames
SheetCount = drawing.GetSheetCount
For i = 0 To SheetCount - 1
    drawing.ActivateSheet SheetName(i)
    Set swSheet = drawing.GetCurrentSheet
    swSheet.SetName "$$$$$$" & i
Next
SheetName = drawing.GetSheetNames
drawing.ActivateSheet SheetName(0)
End Sub
我是想把$$$$$$换为“图纸”2个字
作者: gdzsh    时间: 2017-8-1 16:18
哈哈  把这个符号直接改为图纸就可以了,不过排序是重0开始的,这么才能从1开始呢?

作者: gdzsh    时间: 2017-8-2 09:47
本帖最后由 gdzsh 于 2017-8-2 09:50 编辑
Francis 发表于 2014-9-5 22:00
試下這段代碼.

请问swSheet.SetName "$$$$$$" & i,这里这么才能从1开始排序呢?我试验发现是从0开始排序的。我把For i = 0 To SheetCount - 1里面的0修改为1,运行了后发现还是从0开始排序的。求指教!

作者: Francis    时间: 2017-8-2 11:24
gdzsh 发表于 2017-8-1 16:18
哈哈  把这个符号直接改为图纸就可以了,不过排序是重0开始的,这么才能从1开始呢?

本來打算回答, 但回答內容可能讓提問者有負面感覺, 看到大大如此高興(哈哈), 那就不掃興了.

作者: jnscl    时间: 2018-3-1 12:40
真是神人!
作者: fdrslmm    时间: 2018-7-31 16:30
智商不是一般的高
作者: de0830    时间: 2018-10-11 07:29
那位大侠修改一下,把读取零件名称改为零件编号。
作者: de0830    时间: 2018-10-18 08:00
Francis 发表于 2014-9-5 22:00
試下這段代碼.

这个宏程序很好用,我有个提议。零件属性里面把图纸编号确定。如何修改这个宏去读取属性里面的图纸编号来重命名图纸名称。

作者: de0830    时间: 2018-10-19 19:55
Francis 发表于 2014-9-5 22:00
試下這段代碼.

版主你好,我用过你的宏设计的很好。如果能够把零件编号(属性里面的编号)同步到图纸页名称就更好了。304088847@qq.com

作者: Trouble12138    时间: 2018-11-25 21:44
谢谢楼主  复制代码
作者: wwwerzhou    时间: 2019-1-4 13:41
如果是多配制,把多配制里面的代号代替!
作者: alicen_mo    时间: 2019-1-16 17:41
谢谢,很棒
作者: wxg263    时间: 2019-8-20 13:42
闷神真的要跪拜,跪舔 ,膜拜




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3