問(wèn):有什么方式可以在AutoCAD啟動(dòng)的時(shí)候自動(dòng)加載VBA工程?
答:當(dāng)VBA加載時(shí)會(huì)在AutoCAD目錄下尋找一個(gè)名叫acad.dvb的工程。如果找到,就會(huì)自動(dòng)加載它。如果你想VBA和缺省工程在 AutoCAD啟動(dòng)的時(shí)候每次都加載,你需要在acad.rx文件中生成一個(gè)入?。VBA被設(shè)計(jì)成命令加載方式(在沒(méi)有激活一個(gè)VBA命令之前不占用任何 內(nèi)存和進(jìn)程)。為了總是加載VBA和acad.dvb工程,請(qǐng)?jiān)赼cad.rx文件中包含下列一行:
acadvba.arx
在AutoCAD 2000中支持嵌入工程,這樣當(dāng)你打開(kāi)擁有嵌入工程的圖形文件時(shí)該工程就會(huì)自動(dòng)加載。所以定義嵌入工程也是一個(gè)很好的自動(dòng)加載VBA工程的辦法。
問(wèn):有辦法可以在AutoCAD啟動(dòng)時(shí)自動(dòng)運(yùn)行一個(gè)VBA例程或宏嗎?
答:當(dāng)然。你可以從AutoCAD的acad.lsp文件的啟動(dòng)功能中通過(guò)VBARUN的命令行版本運(yùn)行一個(gè)工程中的宏。首先,你需要準(zhǔn)備 acad.dvb文件以便自動(dòng)加載。以drawline.dvb作為例子,用VBALOAD命令彈出VBA IDE對(duì)話框。然后用VBA IDE保存為菜單命令保存此工程為新的名字acad.dvb。下一步,激活notepad.exe并且建立或添加下列行到acad.lsp文件中:
(defun S::STARTUP() (command "_-vbarun" "drawline"))
問(wèn): AutoCAD支持VBA多工程的打開(kāi)嗎?
答:在2000中支持。但在14版中尚不支持。
問(wèn):我可以加密我的VBA模塊代碼嗎?
答:雖然VBA不支持可執(zhí)行文件的創(chuàng)建,但是它確實(shí)在一個(gè)工程的基礎(chǔ)上提供了口令保護(hù)工程窗體、類(lèi)和模塊可見(jiàn)性的功能。你可以發(fā)現(xiàn)這個(gè)工程保護(hù)功能在VBA IDE菜單中。選擇 工具 > 工程屬性 > 保護(hù)。如下圖所示:
問(wèn):在VBA中如何在命令行上提示?
答:有一些方法允許在命令行提示輸入以獲取數(shù)據(jù)。這些方法以“GET”開(kāi)頭。你可以發(fā)現(xiàn)決大多數(shù)的方法(如果不是全部的話)通過(guò)對(duì)象瀏覽器搜索 AutoCAD類(lèi)型庫(kù)。啟動(dòng)VBA IDE。擊F2功能鍵或者從視圖菜單中選擇對(duì)象瀏覽器。?對(duì)象瀏覽器窗口中使用庫(kù)范圍下拉列表把缺省的<所有庫(kù)>改成AutoCAD。庫(kù)列表 下面的編輯列表框是用來(lái)搜索的。輸入GET到那個(gè)編輯列表框中并且敲回車(chē)鍵。包含“GET”的類(lèi)和成員函數(shù)就會(huì)顯示在滾動(dòng)列表中。AcadUtility 的一些成員函數(shù)可以?命令行上提示用戶(hù)輸入。如下圖所示:
問(wèn):我怎樣從AutoCAD菜單中激活一個(gè)VBA例程?
答:你需要編輯菜單和添加VBARUN模塊子例程。首先確認(rèn)正確的VBA工程已經(jīng)加載。
問(wèn):我怎樣從AutoCAD菜單中啟動(dòng)一個(gè)VBA對(duì)話框(窗體)?
答:除了創(chuàng)建一個(gè)VBA窗體,你還需要?jiǎng)?chuàng)建一個(gè)VBA子例程來(lái)顯示這個(gè)窗體。而這個(gè)子例程需要用VBARUN命令激活。1. 啟動(dòng)VBA IDE;2. 從菜單中選擇 插入 > 用戶(hù)窗體(缺省名稱(chēng)為UserForm1);3. 添加合適的控件到你的窗體中; 4. 下一步,從菜單中選擇 插入 > 模塊;5. 輸入以下的代碼到缺省的Module1模塊中:Sub Foo() UserForm1.showEnd Sub6. 最后,編輯AutoCAD菜單調(diào)用以下命令來(lái)激活對(duì)話框: -VBARUN Module1.foo.
問(wèn):我已經(jīng)寫(xiě)了一個(gè)VBA例程用ThisDrawing.Utility.GetPoint獲取一個(gè)點(diǎn)。當(dāng)我從一個(gè)VBA對(duì)話框中啟動(dòng)這個(gè)例程時(shí),我可以在命令行上看到提示。但是我不能在AutoCAD屏幕上點(diǎn)取一個(gè)點(diǎn)。我作錯(cuò)了什么?
答:首先需要關(guān)閉對(duì)話框,然后才能從AutoCAD獲取數(shù)據(jù)。添加以下的代碼到ThisDrawing.Utility.GetPoint之前的任何地方以關(guān)閉對(duì)話框,然后你就可以獲得一個(gè)點(diǎn)了。
Me.Hide
問(wèn):有方法加載一個(gè)VBA工程而在加載后不顯示VBA IDE嗎?
答:如果你設(shè)置AutoCAD系統(tǒng)變量FILEDIA為0,或者在你加載一個(gè)工程的時(shí)候把<打開(kāi)VBA編輯器>的開(kāi)關(guān)關(guān)閉,你就不會(huì)?加載之后看到VBA IDE了。這是一個(gè)標(biāo)準(zhǔn)的AutoCAD轉(zhuǎn)換機(jī)制。
問(wèn):VBA和AutoLISP有何不同,兩者如何轉(zhuǎn)換?
答:如果你已經(jīng)熟知AutoLISP并且想學(xué)習(xí)VBA,通過(guò)把VBA和AutoLISP表達(dá)式聯(lián)系起來(lái)的方法就可以容易地做到。以下就是一個(gè)關(guān)于兩 種語(yǔ)言的比較。由于大量的AutoLISP代碼可以利用,轉(zhuǎn)換一個(gè)已有的AutoLISP代碼段為VBA遠(yuǎn)比重新編制VBA代碼來(lái)得容易。如果兩者的變量 名字保持一致,那么比較兩者的代碼也就變得容易了。
點(diǎn):
在AutoLISP中,你用(setq)函數(shù)來(lái)設(shè)置一個(gè)點(diǎn)。下面這一行把點(diǎn)(0,0,0)分配給PT1變量。(0,0,0)代表這個(gè)點(diǎn)位置的x,y,z坐標(biāo)。
(setq PT1 (0 0 0))
在VBA中,這個(gè)操作需要更多的代碼行來(lái)完成:
Dim PT1(0 To 2) As Double
PT1(0) = 0#