CADVBA(一)、開啟連接的大門

前言

一般提到CAD大多數都以為是AutoCAD,但其實CAD版本有好多好多種,只是因為學校通常都先教AutoCAD進行使用,透過教育版的免費制度培養一票AutoCAD的粉絲,在習慣介面之後跳往其他版本的CAD會有點障礙,但因為AutoCAD在後期大多改成訂閱制,導致很多公司行號轉往其他管道使用,筆者所在的機關目前也是使用ProgeCAD作為主力使用。

關於CAD的版本:

  1. AutoCAD(訂閱制)
  2. ZWCAD(中資成分被禁用)
  3. ProgeCAD(買斷制)

如果基本的操作功能不敷使用導致效率低落時,可以透過CAD本身提供的套件進行額外強化,而VBA則是提供套件之一,筆者自2018年起便開始進行AutoCADVBA相關開發,特別介紹啟蒙導師為馬克的營建與電腦,當初就是被他的Excel自動繪製縱坡圖表吸引到,而開始一系列的研究之路。

本系列文主要是介紹筆者在CADVBA上的心路歷程,希望能夠由淺入深,期待各位讀者吸收後也能具備修改VBA程式碼的能力,優化自身工作流程,藉由節省下來的時間來開發更多好用的工具,良性循環。

VBA環境建立

AutoCAD

自2012年起,不再預設安裝於AutoCAD,如果需要使用時要到官網下載安裝。

官方VBA下載點

ProgeCAD

內建於裡面,但屬性及方法仍不像AutoCAD那麼完整,有時候請原廠修復時也比較會拖,需要透過修改演算法進行問題排除。

不同版本間的CAD開發

Excel與CAD連接方法

Excel是大部分工程人員最常接觸的工具,Excel作為資料進出的主要操作媒介,同時也具備VBA的功能,能夠將CAD作為引用項目進行連動,資料就能透過Excel與CAD連接,驅動CAD進行圖說繪製。

先期引用

Excel>檔案>選項>自訂功能區>開發人員勾選

Fig1. 開發人員選單

開發人員>檢視程式碼>工具>設定引用項目>找到相關的套件勾選

Fig2. 引用項目勾選

若以ProgeCAD2021版為例,會找到ProgeCAD 2021 Object Library,這個就是引用對象,不同年代版本對應到的名稱會不同,這是他比較麻煩的地方。

後期引用

如欲進行後期引用需要先執行下列CADInit後將CAD參數代入後生成全域對象,才能進行後續使用,好處是可以不用管CAD年代版本就能直接使用,對於不同環境的電腦只要確保VBA安裝成功基本上就能使用。

全域對象是指在同一專案中即便不同模組也能使用的物件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public mo '模型空間
public pa '配置空間
public acadDoc '現正作用中的可編輯dwg

Sub CADInit()

On Error Resume Next

Set acadApp = GetObject(, "AutoCAD")
If Err <> 0 Then Set acadApp = CreateObject("AutoCAD")
acadApp.Visible = True

On Error GoTo 0

Set mo = acadApp.ActiveDocument.ModelSpace
Set pa = acadApp.ActiveDocument.PaperSpace
Set acadDoc = acadApp.ActiveDocument

End Sub

舊文參考

AutoCADVBA學習資源 VBA引用項目問題

踩雷過程

  • AutoCAD用先期引用時,會因為各主機安裝版本不同導致出現錯誤,需要進入程式碼編輯器中勾選正確版本的引用項目,並取消遺漏的引用項目,不然會導致程式碼出現不可解釋的錯誤行為。
  • ProgeCAD只能透過先期引用,後期引用會失效,操作部分物件內容時會失效,我遇到的是Library物件的操作會出現問題,Library物件的CreatePoint方法與點資料密切關連,不可避免,後來透過明確的先期引用引入就可以了。
  • 物件瀏覽是在查詢對象的屬性及方法必備工具,需要有引用才有辦法顯示ProgeCAD相關物件,引用的名稱叫做IntelliCAD,如要採用後期引用時,傳送給其他人時要記得取消勾選。