標籤:

VBA 如何把字元串轉換為可執行語句?

譬如一下代碼

dim a as string

a="msgbox hello"

然後執行a,結果和執行 msgbox 「hello」 相同

問題:有什麼函數或者方法在程序中執行變數a所包含的語句


可以利用VBA的工程對象模型(VBA Project Object Model)實現這個目的.

(以下截圖使用的是Excel 2013, 其它版本的Excel也可以使用)

1. 在選項中開啟"信任對VBA工程對象模型的訪問"

2. 在VBA工程中添加"Microsoft Visual Basic for Application Extensibility"引用(不同Excel版本可能不同,我的是5.3), 引用這個後,就可以動態修改VBA工程中的代碼了.

3. 加入兩個模塊"EvalModule"和"EvalModuleStub", 模塊中的代碼分別如下:

EvalModule:

Option Explicit

Public Sub Eval(code As String)
Dim comp As VBComponent
Set comp = ActiveWorkbook.VBProject.VBComponents("EvalModuleStub")
Call comp.CodeModule.DeleteLines(2, comp.CodeModule.CountOfLines - 2)
Call comp.CodeModule.InsertLines(2, code)
Call EvalStub
End Sub

EvalModuleStub:

Sub EvalStub()
lineholder
End Sub

4. 然後, 你就可以使用Eval來執行任意VBA代碼了:


使用vbproject.vbcomponents.add新建模塊,將字元串通過vbproject.vbcomponents.codemodule.insertlines寫到模塊內容里,不過前後要加上sub a()和end sub

然後call a


調用下過程函數就可以


推薦閱讀:

有哪些學習vba的好書推薦?現在學習vba是否有些過時?現在比較好的操縱word和excel的方式有哪些?
請各位VBA大神救命!?
怎樣將xml批量導入excel?
Excel VBA入門(九)操作工作薄

TAG:VBA |