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ǎo)出到當前子目錄
export,并從當前子目錄import里,導(dǎo)入各個bas文件為對應(yīng)文件名的模塊。比如我的一個main.bas文件里的代碼會導(dǎo)入成main模塊。這樣,就可以用 sublime或者 atom等ide來編輯。
main模塊 - 兩個問題
- 問題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ù),有誰幫我解釋一下嗎?

宏
