SolidWorks專門論壇 SolidWorks forum

 找回密碼
 註冊
查看: 14678|回復: 15

次組件三態巨集

[複製鏈接]
發表於 2016/3/5 19:00:44 | 顯示全部樓層 |閱讀模式
次組件三態連結

因為變更模型組態屬性需要不少步驟,所以我錄製三個巨集用來做切換,但只有當組態名稱為"預設"時才有作用,請問該如何修改成任何組態名稱都能夠使用?

底下是其中之一個巨集內容。

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("預設", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.EditConfiguration3("預設", "預設", "", "", 38)
End Sub

發表於 2016/3/6 13:26:00 | 顯示全部樓層
悶人估計翔仔的問題重點是『程式碼如何配合不同名稱的組態?』
***如果悶人估計錯誤,以下文章可以不理。***



獲取當前組態名稱的方法:
先用GetActiveConfiguration獲取組態(物件),再用Name獲取其名稱,語句如下:
Part.GetActiveConfiguration.Name
將這語句取代所有的"預設"(必須連同引號一起取代)

順帶一提,錄製的巨集通常需要略作修正,例如:
1. boolstatus = Part.Extension.SelectByID2("預設", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0) 是沒用的,可以整句刪除。
2. Set swApp = _ 隔行 Application.SldWorks 可以改為 Set swApp = Application.SldWorks
3. boolstatus = Part.EditConfiguration3(Part.GetActiveConfiguration.Name, Part.GetActiveConfiguration.Name, "", "", 38)
        可以改為 Part.EditConfiguration3 Part.GetActiveConfiguration.Name, Part.GetActiveConfiguration.Name, "", "", 38
按照這樣修改,應該可以解決翔仔的困擾。
不過,這巨集會清空組態某些屬性(Comment, Alternatename),雖然可用但存在隱患,就當作這是個學習過程吧。



建議使用函數:ChildComponentDisplayInBOM(2014 SP3 及往後版本才支持)
倘若翔仔有興趣探討才繼續討論吧,免得又一次變成一廂情願的悶討論
發表於 2016/3/6 13:54:33 | 顯示全部樓層
假設翔仔有興趣探討,悶人繼續說明吧。
***如果悶人假設錯誤,以下文章可以不理。***



使用函數 ChildComponentDisplayInBOM,先要取得 Configuration
取得 Configuration 的語句如下:
Set Config = Application.SldWorks.ActiveDoc.GetActiveConfiguration

整個巨集如下:
Dim Config As Object
Dim InBom As String
Sub main()
Set Config = Application.SldWorks.ActiveDoc.GetActiveConfiguration
InBom = Config.ChildComponentDisplayInBOM
InBom = InputBox("1 = 隱藏,      2  =顯示,      3 = 升級", "次組件的三態設定", InBom)
Config.ChildComponentDisplayInBOM = InBom
End Sub


這樣就可以利用 InputBox 設定 並 查詢次組件的三態。
可是,在 InputBox 輸入非 1、2、3 的字符就可能報錯,自己用尚可,給別人使用可能引來咒罵。



建議使用邏輯語句避開這類報錯。
倘若翔仔有興趣探討才繼續討論吧,免得又一次變成一廂情願的悶討論
 樓主| 發表於 2016/3/6 15:17:07 | 顯示全部樓層
Francis 發表於 2016/3/6 13:26
悶人估計翔仔的問題重點是『程式碼如何配合不同名稱的組態?』
***如果悶人估計錯誤,以下文章可以不理。** ...

悶哥:

一直想學習巨集,但卻找不到相關的書(可能是我根本不知道哪本書才對),每次看到大家分享的巨集都只能打開看看就又關掉了。因為完全陌生,想問也沒有方向。

最近去上了機械手臂的課程,覺得寫法跟SW的巨集很像(宣告、函數、命令等等),講義裡有各種命令的名稱及用法,不知道SW的巨集是不是也有這些資料。

20160307補充 依照悶哥指導修改原有巨集,測試成功。
 樓主| 發表於 2016/3/6 15:25:36 | 顯示全部樓層
Francis 發表於 2016/3/6 13:54
假設翔仔有興趣探討,悶人繼續說明吧。
***如果悶人假設錯誤,以下文章可以不理。***



悶哥這個巨集非常好用啊!該輸入什麼都已經顯示了,照著輸入就不會報錯了。

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?註冊

x
發表於 2016/3/6 19:38:44 | 顯示全部樓層
對翔仔的回覆有點失望。

如果單純抱著“拿來主義”來提問,拋下問題等待收成,這是沒有問題的。

不過翔仔4樓表明自己想學習巨集,但是又好像沒有仔細看悶人的內文,到底是什麼的姿態?難道真的一點問題也沒?
可能會說,害怕問得多會給脾氣古怪的悶人責罵,這藉口看似有理但實屬無稽,要知道越是不正視問題,越顯得矯揉造作,絕非君子之所為也。
 樓主| 發表於 2016/3/6 19:59:14 | 顯示全部樓層
Francis 發表於 2016/3/6 19:38
對翔仔的回覆有點失望。

如果單純抱著“拿來主義”來提問,拋下問題等待收成,這是沒有問題的。

實在是怕問得太基礎(連宣告怎麼用、命令有哪些都不知道),所以才想先找書學...,悶哥應該有體會到我是不怕被罵的吧~

問題一:例如2#的回覆裡2.&3.應該單純是將多餘的符號、空格刪除,但1.是將整句刪除。

錄製的巨集該如何判斷哪些需要修正呢?

問題二:悶哥指出2#那樣修改的巨集可用但存在隱患,能否加以說明呢?

問題三:3#的宣告跟我錄製的巨集裡的宣告只有"Dim Config As Object"是相同的,刪除的那些有何用途、為何3#巨集不需要;新增的宣告又是什麼用途?

問題四:3#最後說以邏輯語句避開報錯,悶哥設定成輸入1、2、3我覺得已經很好用了啊,有更好的方法嗎?

點評

越是基礎越是重要,可惜許多人都誤解基礎等於低等。 另外,直接尋找SW的基礎編程書籍,能如願的機會相信極低,可從別的書籍著手,例如Excel的VBA,甚至利用機械手臂課程來了解編程基礎也是很不錯的。 問題一:沒有  詳情 回復 發表於 2016/3/7 00:49
發表於 2016/3/7 00:49:39 | 顯示全部樓層
臭臉翔 發表於 2016/3/6 19:59
實在是怕問得太基礎(連宣告怎麼用、命令有哪些都不知道),所以才想先找書學...,悶哥應該有體會到我是不怕 ...

越是基礎越是重要,可惜許多人都誤解基礎等於低等。
另外,直接尋找SW的基礎編程書籍,能如願的機會相信極低,可從別的書籍著手,例如Excel的VBA,甚至利用機械手臂課程來了解編程基礎也是很不錯的。

問題一:沒有標準答案。當打穩基礎,自然懂得如何精簡。像語文一樣,就算是語文教授,也難以用三言兩語就可以教導別人寫出好文章。

問題二:已經說了『這巨集會清空組態某些屬性(Comment, Alternatename)』,詳情可在SW-API幫助文件尋找 EditConfiguration3 。

問題三:翔仔錄製巨集裡並沒有"Dim Config As Object",何來相同?,要明白Dim(Declare In Memory 不是 Dimension)是什麽,先要了解什麼是“變數”(Variable)https://msdn.microsoft.com/en-us ... 0%28v=vs.60%29.aspx。變數可以是很細小的“是與否”,也可以非常龐大的“物件”(物件可以簡單理解為一個APP);一個“是與否”只佔據一個bit(八分之一個Byte),一個“字節”佔據2個Byte,“整數”佔據4個Byte,“雙精度浮點”(實數)佔據8個Byte,“Variant”佔據22個Byte,如果不把變數做好宣告,系統就會用最大的記憶空間處理變數,每個有可能超過22個Byte,好比酒席中什麼菜式都用最大的碟子來盛載,無論醬油還是酸菜都用上了乳豬的碟子,不難想像情況是多麼的混亂。宣告做得好還有一個好處,在編程的時候會自動出現提示語句,加快速度並減少出錯。

問題四:有點像中學通識課的問題,看似宏觀但空泛。已經說了,自用的話什麼都可以,只不過是將就一下而已。在程式碼加入一些邏輯語句作為條件規限,比如按下取消不會報錯等等,並不是寫上一些提示文字。
 樓主| 發表於 2016/3/7 10:29:18 | 顯示全部樓層
Francis 發表於 2016/3/7 00:49
越是基礎越是重要,可惜許多人都誤解基礎等於低等。
另外,直接尋找SW的基礎編程書籍,能如願的機會相信 ...

那我今天就去找Excel的VBA書籍來學習。

問題三:我先消化一下...(關於8#的3#的宣告跟我錄製的巨集裡的宣告只有"Dim Config As Object"是相同的,顯然是我看錯了,不好意思)

問題四:了解意思了,除了悶哥說的取消不報錯以外,甚至可以加入"當輸入錯誤時跳出溫馨提示"對嗎?

點評

謝謝翔仔回覆。 先回答問題,是的,當然會還有其他方法,例如建立窗體,使用選項按鈕,如下圖: [attachimg]180364[/attachimg] 歸納一下上述要點:(重點編碼是 樓層.順序) 2.1 錄製的巨集會記錄所有動作,如點選  詳情 回復 發表於 2016/3/7 11:31
發表於 2016/3/7 11:31:34 | 顯示全部樓層
臭臉翔 發表於 2016/3/7 10:29
那我今天就去找Excel的VBA書籍來學習。

問題三:我先消化一下...

謝謝翔仔回覆。
先回答問題,是的,當然會還有其他方法,例如建立窗體,使用選項按鈕,如下圖:


歸納一下上述要點:(重點編碼是 樓層.順序)
2.1 錄製的巨集會記錄所有動作,如點選模型組態。
2.2 語句太長,可用底線字符"_"隔行。
2.3 不需要“傳回值”的話可作簡化,如去掉等號和括號。
什麽是傳回值(return),見以下鏈接:
http://www.solidworks.org.tw/forum.php?mod=viewthread&tid=27073
2.4 翔仔有需回應2樓的程式碼是否可行。(估計急於求成,沒有理會)
3.1 提取物件,可以一層一層地提取,也可直接提取。
例子:(一層一層地提取)
set mysw = application.sldworks
set mydoc = mysw.activedoc
set mycofig = mydoc.getactiveconfiguration
例子:(直接提取)
set myconfig = application.sldworks.activedoc.getactiveconfiguration
3.2 悶人故意不分隔等號與顯示,測試出翔仔欠缺精益求精的態度。

3.3 善用現成的對話框代替窗體,如 msgbox 和 inputbox。

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?註冊

x
 樓主| 發表於 2016/3/7 18:29:13 | 顯示全部樓層
Francis 發表於 2016/3/7 11:31
謝謝翔仔回覆。
先回答問題,是的,當然會還有其他方法,例如建立窗體,使用選項按鈕,如下圖:



請各位朋友特別注意【Set Config = Application.SldWorks.ActiveDoc.GetActiveConfiguration】獲取的是當前組態,而當前組態名稱喔~

依樣畫葫蘆成功了。

想要按照SW的順序"1.顯示2.隱藏3.升級"而改了內容,但是發現"Inbom = InputBox("1 = 隱藏,     2 = 顯示,     3 = 升級", "次組件三態設定", Inbom)"只是針對彈出視窗的內容,與組合件的三態不吻合,所以又改了回來。

請問:
10#的彈出視窗怎麼做的,選擇起來更方便了!也能顯示當前的選擇嗎?
2.3 傳回值我先看看,謝謝悶哥特地找出連結來~
2.4 可行,已於4#補充
3.1
Set swApp = Application.SldWorks
Set mysw = Application.SldWorks
Set mydoc = mysw.ActiveDoc
Set mycofig = mydoc.GetActiveConfiguration
set myconfig = application.sldworks.activedoc.getactiveconfiguration
分別提取的資料為何?


本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?註冊

x

點評

又改了回來。所說為何? 插入窗體,針對不同的要求,編寫對應的程式碼。 不用謝。 示範而已。 另請查找並回答以上還沒回答的問題。  詳情 回復 發表於 2016/3/7 20:38
發表於 2016/3/7 20:38:54 | 顯示全部樓層
臭臉翔 發表於 2016/3/7 18:29
依樣畫葫蘆成功了。

想要按照SW的順序"1.顯示2.隱藏3.升級"而改了內容,但是發現"Inbom = InputBox("1  ...

又改了回來。所說為何?

插入窗體,針對不同的要求,編寫對應的程式碼。

不用謝。

示範而已。

另請查找並回答以上還沒回答的問題。
 樓主| 發表於 2016/3/7 22:25:37 | 顯示全部樓層
Francis 發表於 2016/3/7 20:38
又改了回來。所說為何?

插入窗體,針對不同的要求,編寫對應的程式碼。

回悶哥:
SW裡由上而下的順序是顯示→隱藏→升級,巨集的順序是1=隱藏,2=顯示,3=升級,我照著SW的順序修改,但發現只改到彈出視窗的內容,所以改回悶哥原本寫的順序。

另外我不得不承認,我到目前為止還是毫無頭緒,連要回答什麼都搞不懂...

在網路上搜尋到http://www.pws.stu.edu.tw/tntsai/VBA-1002/Chapter1.pdf,我先基本認識一下希望能有幫助吧...

點評

原來真的那麼......,這個非常簡單的三態設定巨集,看情況翔仔連十分之一也看不懂,估計這是恐懼英語的後遺症,導致再簡單的語句也無法閱讀消化。 深表同情,愛莫能助。  詳情 回復 發表於 2016/3/7 23:34
發表於 2016/3/7 23:34:25 | 顯示全部樓層
臭臉翔 發表於 2016/3/7 22:25
回悶哥:
SW裡由上而下的順序是顯示→隱藏→升級,巨集的順序是1=隱藏,2=顯示,3=升級,我照著SW的順序修改 ...

原來真的那麼......,這個非常簡單的三態設定巨集,看情況翔仔連十分之一也看不懂,估計這是恐懼英語的後遺症,導致再簡單的語句也無法閱讀消化。

深表同情,愛莫能助。
 樓主| 發表於 2016/3/7 23:42:14 | 顯示全部樓層
Francis 發表於 2016/3/7 23:34
原來真的那麼......,這個非常簡單的三態設定巨集,看情況翔仔連十分之一也看不懂,估計這是恐懼英語的後 ...

看不懂的單字我有一個一個查翻譯,搞得頭昏腦脹,不過我會繼續的,等我稍微進步一點再向悶哥請教

點評

英語的程度是不會影響學習編程的,電腦語言根本就不是英語,就算編程都改用方塊字,欠缺邏輯思維的話,一樣會頭昏腦脹,甚至更加糟糕。 翔仔的致命點在於“差不多”的思維,在11樓的截圖可見,明明白白是“獲取當前  詳情 回復 發表於 2016/3/8 08:01
發表於 2016/3/8 08:01:47 | 顯示全部樓層
臭臉翔 發表於 2016/3/7 23:42
看不懂的單字我有一個一個查翻譯,搞得頭昏腦脹,不過我會繼續的,等我稍微進步一點再向悶哥請教{:1_356: ...

英語的程度是不會影響學習編程的,電腦語言根本就不是英語,就算編程都改用方塊字,欠缺邏輯思維的話,一樣會頭昏腦脹,甚至更加糟糕。

翔仔的致命點在於“差不多”的思維,在11樓的截圖可見,明明白白是“獲取當前組態”,居然給翔仔理解為“獲取當前組態名稱”,這是什麼的理由?可能會說:“只不過是多了個“名稱”,有什麼大不了呀!”,當然完全不同,請問“翔仔名稱”與“翔仔”有沒有分別呢?

一些通識課的字眼,諸如:針對、範疇、為何,只能暫時嚇唬他人,久而久之必會『黔驢技窮』。
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

論壇統計|手機版上論壇|論壇來自幾何科技 論壇架構版次 20240312

GMT+8, 2024/4/16 13:35 , Processed in 0.268018 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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