office VBA的ide實在是太爛了铐望,代碼提示和語法高亮功能都不行,但是由于MS沒有開放這個接口茂附,不能用如sublime或Atom這樣優(yōu)秀的第三方編輯器正蛙?
經(jīng)過一番研究,利用vba的導(dǎo)入導(dǎo)出模塊的功能 营曼,部分實現(xiàn)了這個功能:
- 新建一個xlsm文件
-
alt
+F11
打開vbe環(huán)境乒验,選中左邊的ThisWorkbook,在代碼面板輸入下面的代碼
Public Sub exportAndImport()
Dim wkBook As Excel.Workbook
Dim wkComp As VBIDE.VBComponent
Dim macroPath As String
Set wkBook = ThisWorkbook
On Error Resume Next
macroPath = ThisWorkbook.Path & "\" & "export\"
For Each wkComp In wkBook.VBProject.VBComponents 'export
If wkComp.Type = vbext_ct_StdModule Then '如果是模塊就導(dǎo)出并刪除
wkComp.Export macroPath & wkComp.Name & ".bas"
wkBook.VBProject.VBComponents.Remove wkComp
End If
Next
macroPath = ThisWorkbook.Path & "\" & "import\"
tempfile = Dir(macroPath & "*.bas")
While tempfile <> ""
Set wkComp = wkBook.VBProject.VBComponents.import(macroPath & tempfile) '導(dǎo)入代碼
wkComp.Name = Left(tempfile, Len(tempfile) - 4)
tempfile = Dir
Wend
Debug.Print "in export and import"
End Sub
- 解釋下蒂阱,這就是把當(dāng)前工作薄里的所有模塊導(dǎo)出到當(dāng)前子目錄
export
徊件,并從當(dāng)前子目錄import
里奸攻,導(dǎo)入各個bas
文件為對應(yīng)文件名的模塊。比如我的一個main.bas
文件里的代碼會導(dǎo)入成main
模塊。這樣,就可以用 sublime或者 atom等ide來編輯郁妈。
- 兩個問題
- 問題1:眾所周之一铅,在VBA中,模塊是導(dǎo)出成
.bas
文件泼掠,類模塊是導(dǎo)出成.cls
文件,但是我發(fā)現(xiàn).VBProject.VBComponents.import
不能指定導(dǎo)入類型,只要是允許導(dǎo)入的文件窖梁,都導(dǎo)入成VBA的模塊
。更不用提窗體的frm
文件夹囚。 - 問題2:為了方便纵刘,我在工作表里扔了兩個Button,一個Button宏是上述的函數(shù)荸哟,一個Button宏是運行
main
里的一個main()
函數(shù)
但是我發(fā)現(xiàn)假哎,只要把這兩個宏的功能集中的一個宏里,就會出問題鞍历,類似下面這樣
call exportAndImport()
call main.main()
感覺是exportAndImport舵抹,會多導(dǎo)入一個bas文件,結(jié)果會導(dǎo)致函數(shù)定義重復(fù)劣砍,有誰幫我解釋一下嗎惧蛹?