SOLIDWORKS 專門論壇 SolidWorks forum

 找回密碼
 註冊
查看: 49996|回復: 250
收起左側

無需運行SOLIDWORKS程序, 批量修改SOLIDWORKS檔案屬性

  [複製鏈接]
發表於 2014/10/12 18:54:47 | 顯示全部樓層 |閱讀模式
看到標題, 各位可能會以為是 EPR 或 EPDM 的玩意,
其實是介紹一個利用 Excel 來實現批量修改工程圖檔案屬性的方法.

具體是採用 Excel 作為操作界面, (這樣就可以省卻許多複雜編程技巧)
再以 SolidWorks Document Manager API (注意: 與 SolidWorks API 是完全不同的一回事啊! ) 作為接口進行修改或增減SW檔案內部的屬性, 這是無需運行SW程序的, 甚至電腦沒有安裝SW軟體也可以的 (當然存在前設條件的),
速度估計比需要運行 SW 程序的 SolidWorks API 快 1000 倍以上.

以下附件是一個 Excel 檔案"臭臉翔.xls": (這檔案隨意放置即可, 不一定要與SW工程圖檔案一起存放的)
臭臉翔.rar (13.26 KB, 下載次數: 3356)
 樓主| 發表於 2014/10/12 19:28:36 | 顯示全部樓層
回到 Excel, 按一下『執行代碼』, 輸入 SolidWorks Document Manager API 的許可證密碼, 瞬間就完成了, 見如下動畫:
(注意: 該許可證密碼, 是悶人向其中一個客戶所暫借的, 不可公開; 就算是悶人所擁有的, 也是不可能提供, 因為洩露該密碼後, 除了會失去軟體的使用權外, 更可能被追究法律責任的.)
Untitled.gif

查看剛才那幾個SW工程圖檔案的內部屬性, 屬性都已經加上了, 見下圖:
SNAG-0002.png
SNAG-0004.png
SNAG-0010.png
SNAG-0011.png
SNAG-0012.png

如果是有效的SW客戶, 可聯絡代理商, 查詢如何獲取該密碼.
當然, 有了該密碼後, 可以略為修改代碼, 跳過輸入許可證那步的對話框, 如下圖:
SNAG-0013a.png

加入了許可證密碼的 Excel 檔案, 千萬不可交給非同一機構的人士, 若真的要向外發放 Excel 檔案, 必先刪除該密碼 或 把代碼加密.
 樓主| 發表於 2014/10/13 12:36:50 | 顯示全部樓層
補充:
程式碼是以SW2013為基礎, 如果手頭版本不同, 需要到程式碼編輯器>工具>設定引用項目>加入"SwDocumentMgr 20?? Type Library", 見下圖:
SNAG-0001.png
Untitled-1.png
發表於 2014/10/13 00:40:43 | 顯示全部樓層
衷心感謝悶大花了許久時間編寫此教程!
明早上班立馬詢問代理商,爾後才能跟進參與討論!
再次謝謝悶大!
 樓主| 發表於 2014/10/13 01:36:58 | 顯示全部樓層
gt.adan 發表於 2014/10/13 00:40
衷心感謝悶大花了許久時間編寫此教程!
明早上班立馬詢問代理商,爾後才能跟進參與討論!
再次謝謝悶大! ...

以下鏈接(3樓), 說明了如何從SW網站直接取得SWDM-API許可證.
http://fans.solidworks.com.cn/thread-35786-1-1.html
發表於 2014/10/13 08:11:23 | 顯示全部樓層
好強大的教學 , 這需要時間慢慢研究
 樓主| 發表於 2014/10/14 12:16:52 | 顯示全部樓層
請問有誰成功獲取SWDM-API的許可證號碼? 在Excel的試驗效果如何? 悶人很想知道有否阻滯, 期待大家的回答, 謝謝!
發表於 2014/10/14 12:20:32 | 顯示全部樓層
在朋友的幫忙下,阿丹得以用最快的速度取得SWDM的KEY,
運行了悶大的代碼結果====>毫秒殺
現在能體會悶大說效率太高是什麼意思了~~^^
謝謝悶大提供一個機會讓大家有機會接觸到SWDM,
更謝謝悶大花寶貴時間寫教程,讓我體會到了直接調用 API ,秒速批次修改屬性的快感!
再多的謝謝仍言不及意,繼續追隨悶大學習!!!

A.png
B.png
C.png
D.png
E.png
F.png

capture-1.gif

G.png
H.png
I.png
J.png
K.png
L.png

發表於 2014/10/14 12:44:19 | 顯示全部樓層
小翔苦苦寻求SWDM-API的许可证号码未果,只能眼睁睁看着丹大秒杀
發表於 2014/10/14 13:58:27 | 顯示全部樓層
報告悶老大,臭臉也成功應用了!

正在開心地使用著。 emo_003.gif

謝謝悶老大提供如此神兵利器 emo_016.gif
 樓主| 發表於 2014/10/15 22:06:04 | 顯示全部樓層
臭臉翔 發表於 2014/10/14 13:58
報告悶老大,臭臉也成功應用了!

正在開心地使用著。

恭喜臭哥和丹哥成功應用, 並謝謝兩位積極參與.

但悶人相信還有改良之處, 例如:
1. 開啟按鈕, 彈出的對話框點選檔案, 幫助填寫路徑及檔案名稱
2. 提取工程圖屬性按鈕, 覆核之用
3. 提取工程圖內的零組件屬性按鈕, 有助人手填寫工程圖屬性
4. 零件/組合/工程圖 選項, 讓此程序可修改更多檔案類型的屬性
5. 切換圖頁格式按鈕
6. 輸出 PDF/JPG/DWG 的按鈕

希望各位踴躍參與討論, 集思廣益, 一同研究更完善的程式碼, 謝謝各位.
發表於 2014/10/15 22:15:33 | 顯示全部樓層
Francis 發表於 2014/10/15 22:06
恭喜臭哥和丹哥成功應用, 並謝謝兩位積極參與.

但悶人相信還有改良之處, 例如:

悶大思考的很全面呀~~希望大家真的能積極討論!
再次謝謝悶大的教程。
先請教悶大,SWDM有將屬性寫入配置的語法嗎?
 樓主| 發表於 2014/10/15 22:35:38 | 顯示全部樓層
gt.adan 發表於 2014/10/15 22:15
悶大思考的很全面呀~~希望大家真的能積極討論!
再次謝謝悶大的教程。
先請教悶大,SWDM有將屬性寫入配置 ...

丹哥應該是指 Configuration Specific (模型組態指定) 內的屬性,
SWDM-API 是可以讀寫這些資料的, 詳見Help. (其實悶人也在摸索中)
發表於 2014/10/16 08:33:12 | 顯示全部樓層
Francis 發表於 2014/10/15 22:06
恭喜臭哥和丹哥成功應用, 並謝謝兩位積極參與.

但悶人相信還有改良之處, 例如:

悶老大想得很周到阿!

目前使用上覺得如悶老大說的第一點,可以改用選擇檔案的方式的話,肯定事半功倍。 emo_009.gif

既然使用SWDM-API可以不用運行SW,那是不是可以拿來列印多張圖紙呢
發表於 2014/10/16 09:03:03 | 顯示全部樓層
臭臉翔 發表於 2014/10/16 08:33
悶老大想得很周到阿!

目前使用上覺得如悶老大說的第一點,可以改用選擇檔案的方式的話,肯定事半功倍。

我有一個懶方法

用Excel 的功能~~ CTRL+K (插入超連結)
來選取檔案 也不用檔案輸入名稱


2014-10-16_090601.jpg
 樓主| 發表於 2014/10/16 11:05:50 | 顯示全部樓層
臭臉翔 發表於 2014/10/16 08:33
悶老大想得很周到阿!

目前使用上覺得如悶老大說的第一點,可以改用選擇檔案的方式的話,肯定事半功倍。

1. 第一點可用 Excel VBA 函數:Application.FileDialog 來實現, 建議臭哥嘗試一下.

2. 當然, 某些效果是必須運行SW程序的, 詳見 SWDM-API Help, 很詳細的.
 樓主| 發表於 2014/10/16 11:09:56 | 顯示全部樓層
judyyai 發表於 2014/10/16 09:03
我有一個懶方法

用Excel 的功能~~ CTRL+K (插入超連結)

感謝珠蒂妹參與討論並提供方法.

但方法只是"利用已輸入資料打開該檔案", 而不是原意的"利用對話框幫助填寫路徑及檔案名稱".
 樓主| 發表於 2014/10/16 11:16:22 | 顯示全部樓層
重申, 悶人只是在提供入門之法, 並非在提供客戶服務.

大陸有句話"自己動手 豐衣足食", 相信自行編寫小程序, 除了可得到貼身的功能, 還可以得到一份成功感, 若再能分享, 更是功德無量.
發表於 2014/10/16 11:23:35 | 顯示全部樓層
Francis 發表於 2014/10/16 11:16
重申, 悶人只是在提供入門之法, 並非在提供客戶服務.

大陸有句話"自己動手 豐衣足食", 相信自行編寫小程序 ...

謝謝悶老大帶大家入門 emo_101.gif
發表於 2014/10/16 11:24:57 | 顯示全部樓層
Francis 發表於 2014/10/16 11:05
1. 第一點可用 Excel VBA 函數:Application.FileDialog 來實現, 建議臭哥嘗試一下.

2. 當然, 某些效果是 ...

好的,我來找找看,學習一下,看能不能自己搞定。
 樓主| 發表於 2014/10/16 15:11:07 | 顯示全部樓層
臭臉翔 發表於 2014/10/16 11:24
好的,我來找找看,學習一下,看能不能自己搞定。

試下以下程式碼

彈出的對話框點選檔案的程式碼:
  1. Sub BrowseDialog()
  2. Dim intChoice As Integer
  3. Dim FilePathName As String
  4. Dim i As Integer
  5. RollNumber = 3
  6. PathName = Cells(RollNumber, 1) '讀取第一個路徑的值
  7. While Not (PathName = "" Or PathName = 0 Or IsEmpty(PathName)) '直到讀完路徑欄(尋找繼續填寫的位置)
  8.     RollNumber = RollNumber + 1 '下一列
  9.     PathName = Cells(RollNumber, 1)
  10. Wend '回到>直到讀完路徑欄
  11. Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = True '設定為多選對話框
  12. Application.FileDialog(msoFileDialogFilePicker).Filters.Clear '清除既有類型
  13. Application.FileDialog(msoFileDialogFilePicker).Filters.Add "騷窩宮程圖", "*.SLDDRW" '設定檔案類型
  14. intChoice = Application.FileDialog(msoFileDialogFilePicker).Show '彈出對話框
  15. If intChoice <> 0 Then '判斷有否點選檔案
  16.     For i = 1 To Application.FileDialog(msoFileDialogFilePicker).SelectedItems.Count '逐一讀取所選檔案
  17.         FilePathName = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(i) '讀取完整檔案名稱
  18.         FilePath = Left(FilePathName, InStrRev(FilePathName, "")) '分解路徑
  19.         Filename = Right(FilePathName, Len(FilePathName) - Len(FilePath)) '分解檔案名稱
  20.         Cells(i + RollNumber - 1, 1) = FilePath '填寫路徑
  21.         Cells(i + RollNumber - 1, 2) = Filename '填寫檔案名稱
  22.     Next i
  23. End If
  24. End Sub
複製代碼
 樓主| 發表於 2014/10/16 15:47:48 | 顯示全部樓層
提取工程圖屬性的程式碼:
  1. Sub ReadSlddrwPrp()
  2. Set objClassfac = CreateObject("SwDocumentMgr.SwDMClassFactory")
  3. SWDMLicenseKey = InputBox("輸入許可證密碼")
  4. If SWDMLicenseKey = "" Then Exit Sub
  5. Set swDM = objClassfac.GetApplication(SWDMLicenseKey) '啟動SWDM
  6. HeaderRoll = 2
  7. RollNumber = HeaderRoll + 1
  8. PathName = ActiveSheet.Cells(RollNumber, 1) '讀取第一個路徑的值
  9. While Not (PathName = "" Or PathName = 0 Or IsEmpty(PathName)) '直到讀完路徑欄
  10.     Filename = ActiveSheet.Cells(RollNumber, 2)
  11.     Set swDoc = swDM.GetDocument(PathName & Filename, 3, False, mOpenErrors) '開啟
  12.     If Not swDoc Is Nothing Then
  13.         ColumnNumber = 3
  14.         PropName = ActiveSheet.Cells(HeaderRoll, ColumnNumber)
  15.         While Not (PropName = "" Or PropName = 0 Or IsEmpty(PropName)) '直到讀完表頭
  16.             PropValue = swDoc.GetCustomProperty(PropName, swDmCustomInfoText) '獲取屬性
  17.             Cells(RollNumber, ColumnNumber) = PropValue
  18.             ColumnNumber = ColumnNumber + 1 '下一欄
  19.             PropName = ActiveSheet.Cells(HeaderRoll, ColumnNumber)
  20.         Wend '回到>直到讀完表頭
  21.         swDoc.CloseDoc
  22.     End If
  23.     RollNumber = RollNumber + 1 '下一列
  24.     PathName = ActiveSheet.Cells(RollNumber, 1)
  25. Wend '回到>直到讀完路徑欄
  26. End Sub
複製代碼
 樓主| 發表於 2014/10/16 18:22:54 | 顯示全部樓層
做了一段粗淺動畫顯示過程, 希望可以對臭哥有點鼓勵.
capture-2.gif
發表於 2014/10/16 18:31:51 | 顯示全部樓層
Francis 發表於 2014/10/16 18:22
做了一段粗淺動畫顯示過程, 希望可以對臭哥有點鼓勵.

好讚 emo_010.gif

剛成功在空白excel檔案做出巨集按鈕,但還沒有成功加到悶大給的excel檔案內 emo_058.gif
 樓主| 發表於 2014/10/16 18:51:42 | 顯示全部樓層
臭臉翔 發表於 2014/10/16 18:31
好讚

剛成功在空白excel檔案做出巨集按鈕,但還沒有成功加到悶大給的excel檔案內 ...

不一定要出巨集按鈕的, 隨便一個圖案或圖片, 也可指定巨集的.

開啟悶人提供的 Excel檔案, 按一下 Alt+F11, 把以上兩段的程式碼插入到最後,
返回 Excel版面隨便插入兩個圖案, 各按右鍵指定巨集就可以了.
發表於 2014/10/16 20:40:32 | 顯示全部樓層
Francis 發表於 2014/10/16 15:47
提取工程圖屬性的程式碼:

下午就已貼好代碼,也做了巨集按鈕
但提取檔案屬性一直沒有成功…晚上再仔細看了一次…
原來「表頭」放錯欄位了…><,所以讀不到…
現在成功了!謝謝悶大教學!^^
發表於 2014/10/16 22:07:05 | 顯示全部樓層
Francis 發表於 2014/10/16 18:51
不一定要出巨集按鈕的, 隨便一個圖案或圖片, 也可指定巨集的.

開啟悶人提供的 Excel檔案, 按一下 Alt+F11 ...

悶哥~關於第一段 就是臭臉翔.xls那個
打開是亂碼 可否解譯一下 亂碼文字的意思有一些可以從悶哥的貼圖 大約知道~有一些就不能

2014-10-16_220540.jpg
 樓主| 發表於 2014/10/16 22:15:34 | 顯示全部樓層
gt.adan 發表於 2014/10/16 20:40
下午就已貼好代碼,也做了巨集按鈕
但提取檔案屬性一直沒有成功…晚上再仔細看了一次…
原來「表頭」放錯 ...

謝謝丹哥測試, 也欣賞丹哥勇於面對自己的不仔細.

讓悶人有感而發, 又要說一些悶話了.

悶人所見, 很多從事技術的人士, 都自以為掌握了技術, 瞧不起文職人員, 認為他們只是在做一些非技術性的黑板工作. 認為自己是公司的中流砥柱反得不到合理的待遇; 好像早前專門店這裡有位壇友發帖, 說自己曾贏得什麼的製圖獎項, 覺得公司的圖面不堪入目, 更對好心協助他的同時嗤之以鼻, 到論壇吐一口烏氣的舉動可見一斑. 可悶人找不到該帖子, 不好意思.

其實任何人也有他自己的一個故事, 每個平凡人的背後都不平凡.

悶人真心誠意, 希望可以幫助別人利用方法代替重複工作, 簡化流程從中減少人為錯誤, 更重要的是可以"自助", 利用手中僅有資源配合自己的想法, 編寫一些小程序應付日新月異的種種問題.

如果能把在這些小程序節約得來的時間, 好好利用來編寫更多的程序, 如此類推駕馭工作.

如果臭哥這次可以節省到時間, 希望臭哥可以抽空持續研習, 一來可以訓練邏輯思維, 又可以更好的配合工作.

千萬不要像燈具小翔般, 成功使用座標宏後就急不及待告訴上司, 而不是沉著應戰, 看看能否讓自己也能編寫出簡單又能解決問題的宏程序, 一時的稱讚隨時換來日後的逼迫, 相信燈具小翔的上司不需幾分鐘, 就把小翔這個短暫"功勞"消化, 小翔非但沒法利用省來的時間, 再有難題的話更是難找藉口說不.
 樓主| 發表於 2014/10/16 22:23:28 | 顯示全部樓層
judyyai 發表於 2014/10/16 22:07
悶哥~關於第一段 就是臭臉翔.xls那個
打開是亂碼 可否解譯一下 亂碼文字的意思有一些可以從悶哥的貼圖 大 ...

該段程式碼如下:
  1. Sub SLDDRW1()
  2. Set objClassfac = CreateObject("SwDocumentMgr.SwDMClassFactory")
  3. SWDMLicenseKey = InputBox("輸入許可證密碼")
  4. If SWDMLicenseKey = "" Then Exit Sub
  5. Set swDM = objClassfac.GetApplication(SWDMLicenseKey) '啟動SWDM
  6. SavedFilesNumber = 0
  7. HeaderRoll = 2
  8. RollNumber = HeaderRoll + 1
  9. PathName = ActiveSheet.Cells(RollNumber, 1) '讀取第一個路徑的值
  10. While Not (PathName = "" Or PathName = 0 Or IsEmpty(PathName)) '直到讀完路徑欄
  11.     Filename = ActiveSheet.Cells(RollNumber, 2)
  12.     Set swDoc = swDM.GetDocument(PathName & Filename, 3, False, mOpenErrors) '開啟
  13.     If Not swDoc Is Nothing Then
  14.         ColumnNumber = 3
  15.         PropName = ActiveSheet.Cells(HeaderRoll, ColumnNumber)
  16.         While Not (PropName = "" Or PropName = 0 Or IsEmpty(PropName)) '直到讀完表頭
  17.             PropValue = ActiveSheet.Cells(RollNumber, ColumnNumber)
  18.             swDoc.DeleteCustomProperty PropName '刪除屬性
  19.             swDoc.AddCustomProperty PropName, 30, PropValue '新增屬性
  20.             ColumnNumber = ColumnNumber + 1 '下一欄
  21.             PropName = ActiveSheet.Cells(HeaderRoll, ColumnNumber)
  22.         Wend '回到>直到讀完表頭
  23.         SaveOK = swDoc.Save
  24.         If SaveOK = 0 Then SavedFilesNumber = SavedFilesNumber + 1
  25.         swDoc.CloseDoc
  26.     End If
  27.     RollNumber = RollNumber + 1 '下一列
  28.     PathName = ActiveSheet.Cells(RollNumber, 1)
  29. Wend '回到>直到讀完路徑欄
  30. MsgBox "更新了 " & SavedFilesNumber & " 個檔案"
  31. End Sub
複製代碼
發表於 2014/10/16 22:45:49 | 顯示全部樓層
Francis 發表於 2014/10/16 22:23
該段程式碼如下:

謝謝悶哥~
有看到中文的意思~
再次感謝
發表於 2014/10/17 00:25:25 | 顯示全部樓層
再次謝謝悶大無私的教程和教誨~附上自己的操作畫面~~^^

2014-10-17 上午 12-24-00.png
發表於 2014/10/17 00:52:09 | 顯示全部樓層
悶老大#21說:「悶人只是在提供入門之法, 並非在提供客戶服務」,實在過於謙遜呀~^^
除了開帖的源文件,再看#24,#25的代碼便知~悶大實在佛心來著~~
有朋友問:悶大這個代碼超厲害,但是我比較需要的是「零件」的屬性批次修改而不是工程圖…
其實利用悶大的檔案和代碼,很容易修改的。多看幾次幫助或是悶大以前的教學就不難從中窺知一二。
尤其是悶大在重要代碼後面都有加註解說,就更容易看清楚了~^^

如下圖,將#24樓悶老大分享的「選擇檔案」代碼稍加修改即可!
紅線部份改成任何自己想定義的文字,例如:"SW零件"
藍色部份改成:*.SLDPRT
111.png

如此一來,就可以選擇到零件檔而非工程圖檔了。
===================================================
以上純粹分享使用心得,並不一定正確…望悶老大抽空指導~
[size=14.4444446563721px]===================================================

 樓主| 發表於 2014/10/17 00:55:35 | 顯示全部樓層
gt.adan 發表於 2014/10/17 00:25
再次謝謝悶大無私的教程和教誨~附上自己的操作畫面~~^^

看到丹哥貼出漂亮版面, 非常高興!

讓悶人有動力 繼續研究"提取工程圖內的首個零組件屬性"的程式碼.
發表於 2014/10/17 09:00:01 | 顯示全部樓層
Francis 發表於 2014/10/16 18:51
不一定要出巨集按鈕的, 隨便一個圖案或圖片, 也可指定巨集的.

開啟悶人提供的 Excel檔案, 按一下 Alt+F11 ...

照著悶老大指示的步驟把另兩段程式碼做好了
2014-10-17_09-13-32.jpg
 樓主| 發表於 2014/10/17 11:27:00 | 顯示全部樓層
gt.adan 發表於 2014/10/17 00:52
悶老大#21說:「悶人只是在提供入門之法, 並非在提供客戶服務」,實在過於謙遜呀~^^
除了開帖的源文件,再 ...

1. 丹哥誤會了, 悶人只是希望各位不要以為這是"天降餡餅", 抱著圍觀檢好處的僥倖心態.

2. 要選擇其他檔案類型, 就是這樣編寫代碼, 丹哥的理解正確, 值得一讚.
 樓主| 發表於 2014/10/17 11:31:04 | 顯示全部樓層
臭臉翔 發表於 2014/10/17 09:00
照著悶老大指示的步驟把另兩段程式碼做好了

臭哥也成功了, 高興啊!

看到臭哥的"執行代碼"按鈕, 不禁會心微笑.
發表於 2014/10/17 11:38:36 | 顯示全部樓層
Francis 發表於 2014/10/17 11:31
臭哥也成功了, 高興啊!

看到臭哥的"執行代碼"按鈕, 不禁會心微笑.

是指代碼有三,不知執行的是哪一個嗎

那個我貼完圖之後發現不太對,有改成"修改屬性"。
 樓主| 發表於 2014/10/17 11:59:33 | 顯示全部樓層
臭臉翔 發表於 2014/10/17 11:38
是指代碼有三,不知執行的是哪一個嗎

暈!
clx.gif
發表於 2014/10/17 12:15:45 | 顯示全部樓層
哈哈~臭大被洗臉了!
 樓主| 發表於 2014/10/17 13:33:32 | 顯示全部樓層
由於當檔案被其他軟體正在開啟的時候, 例如SW開啟了其中某幾個的工程圖, 就無法取讀這些檔案.
有個想法, 在 If Not swDoc Is Nothing Then 之後插入 Cells(RollNumber, 2).Interior.ColorIndex = 4,
以顏色顯示檔案是否已經被處理.
顏色的代表值見下圖: (圖片截圖自Excel-VBA-Help)
SNAG-0001.png
還可以刪除那一段彈出提示的程式碼 MsgBox "更新了 " & SavedFilesNumber & " 個檔案".
發表於 2014/10/17 15:17:30 | 顯示全部樓層
我的進度慢了~

我目前只會改這個"開啟檔案"
(其實沒中文註解,VBA的內容不是很懂)

2014-10-17_153954.jpg


 樓主| 發表於 2014/10/17 16:06:19 | 顯示全部樓層
judyyai 發表於 2014/10/17 15:17
我的進度慢了~

我目前只會改這個"開啟檔案"

珠蒂妹真讚啊! (豎起大拇指的表情)
可以教教悶人騷窩靈劍劍法嗎? (多個類型的程式碼)
發表於 2014/10/17 16:10:53 | 顯示全部樓層
Francis 發表於 2014/10/17 16:06
珠蒂妹真讚啊! (豎起大拇指的表情)
可以教教悶人騷窩靈劍劍法嗎? (多個類型的程式碼) ...

因為有宮~當然就需要靈劍咩

我該認真一點,請問"多個類型的程式碼"這不是很懂

我比較想知道悶哥的"獨孤九劍"招式~~聽說失傳了
 樓主| 發表於 2014/10/17 16:38:47 | 顯示全部樓層
judyyai 發表於 2014/10/17 16:10
因為有宮~當然就需要靈劍咩

我該認真一點,請問"多個類型的程式碼"這不是很懂

就是珠蒂妹貼圖的效果.
如下圖:
SNAG-0002.png
 樓主| 發表於 2014/10/17 16:41:37 | 顯示全部樓層
既然珠蒂妹不肯教, 那悶人獻醜了, 加入多個類型的程式碼如下:
  1. Application.FileDialog(msoFileDialogFilePicker).Filters.Add "騷窩宮程圖", "*.SLDDRW" '設定檔案類型
  2. Application.FileDialog(msoFileDialogFilePicker).Filters.Add "騷窩靈劍圖", "*.SLDPRT" '設定檔案類型
  3. Application.FileDialog(msoFileDialogFilePicker).Filters.Add "騷窩珠盒圖", "*.SLDASM" '設定檔案類型
  4. Application.FileDialog(msoFileDialogFilePicker).Filters.Add "所有類型", "*.*" '設定檔案類型
複製代碼
發表於 2014/10/17 16:44:42 | 顯示全部樓層
Francis 發表於 2014/10/17 16:38
就是珠蒂妹貼圖的效果.
如下圖:

已了解~
茱蒂是這麼做的 加入以下畫紅框
2014-10-17_164328.jpg

發表於 2014/10/17 16:49:57 | 顯示全部樓層


capture-1.gif
 樓主| 發表於 2014/10/17 16:51:08 | 顯示全部樓層
提取工程圖內的零組件屬性的程式碼已經寫好了, 相信對臭哥有一定的幫助.
  1. Sub ReadModelPrpInSlddrw()
  2. Dim swModel As SwDMDocument10
  3. Dim dmSearchOpt As SwDMSearchOption
  4. Set objClassfac = CreateObject("SwDocumentMgr.SwDMClassFactory")
  5. SWDMLicenseKey = InputBox("輸入許可證密碼")
  6. If SWDMLicenseKey = "" Then Exit Sub
  7. Set swDM = objClassfac.GetApplication(SWDMLicenseKey) '啟動SWDM
  8. HeaderRoll = 2
  9. RollNumber = HeaderRoll + 1
  10. PathName = ActiveSheet.Cells(RollNumber, 1) '讀取第一個路徑的值
  11. While Not (PathName = "" Or PathName = 0 Or IsEmpty(PathName)) '直到讀完路徑欄
  12.     Filename = ActiveSheet.Cells(RollNumber, 2)
  13.     Set swDoc = swDM.GetDocument(PathName & Filename, 3, False, mOpenErrors) '開啟工程圖
  14.     If Not swDoc Is Nothing Then
  15.         RefModelNames = swDoc.GetAllExternalReferences(dmSearchOpt) '獲取參考檔案名稱
  16.         If Not TypeName(RefModelNames) = "Empty" Then '過濾沒有參考檔案
  17.             Cells(RollNumber, 2).Interior.ColorIndex = 8
  18.             RefModelName = RefModelNames(0) '獲取第一個參考檔案的名稱
  19.             If "SLDPRT" = UCase(Left(RefModelName, 6)) Then '分辨參考檔案的類型
  20.                 RefModelTYpe = 1 '這是零件
  21.             Else
  22.                 RefModelTYpe = 2 '這是組合件
  23.             End If
  24.             Set swModel = swDM.GetDocument(RefModelName, RefModelTYpe, False, mOpenErrors) '開啟
  25.             ColumnNumber = 3
  26.             PropName = Cells(HeaderRoll, ColumnNumber)
  27.             While Not (PropName = "" Or PropName = 0 Or IsEmpty(PropName)) '直到讀完表頭
  28.                 PropNames = swModel.GetCustomPropertyNames '獲取模型內所有屬性的名稱
  29.                 HasPropName = False
  30.                 If Not IsEmpty(PropNames) Then
  31.                     For i = 0 To UBound(PropNames) '核對書否存在表單上的屬性名稱
  32.                         If UCase(PropNames(i)) = UCase(PropName) Then HasPropName = True
  33.                     Next
  34.                 End If
  35.                 If HasPropName Then
  36.                     PropValue = swModel.GetCustomProperty(PropName, swDmCustomInfoText) '獲取參考檔案的屬性
  37.                     Cells(RollNumber, ColumnNumber) = PropValue '寫入屬性到表格
  38.                 Else
  39.                     Cells(RollNumber, ColumnNumber) = "-----" '寫入代表不存在屬性的字符
  40.                 End If
  41.                 ColumnNumber = ColumnNumber + 1 '下一欄
  42.                 PropName = ActiveSheet.Cells(HeaderRoll, ColumnNumber)
  43.             Wend '回到>直到讀完表頭
  44.             swModel.CloseDoc '關閉參考檔案
  45.             Cells(RollNumber, ColumnNumber) = RefModelName '寫入參考檔案名稱到表格到行末
  46.             End If
  47.         swDoc.CloseDoc '關閉工程圖
  48.     End If
  49.     RollNumber = RollNumber + 1 '下一列
  50.     PathName = ActiveSheet.Cells(RollNumber, 1)
  51. Wend '回到>直到讀完路徑欄
  52. End Sub
複製代碼
發表於 2014/10/17 17:37:42 | 顯示全部樓層
Francis 發表於 2014/10/17 16:51
提取工程圖內的零組件屬性的程式碼已經寫好了, 相信對臭哥有一定的幫助.
...

謝謝悶老大

工作告個段落就來研究看看怎麼使用它。
 樓主| 發表於 2014/10/17 17:51:14 | 顯示全部樓層

丹哥, 參與一下悶人這個題目可以嗎:
http://bbs.icax.org/thread-951840-1-2.html
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版上論壇|論壇來自幾何科技

GMT+8, 2019/6/27 04:04 , Processed in 0.116485 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表