[ホーム] >
[VBScript FAQ 一覧] > [VBAで文字変数の内容をコードとして評価して実行する]
VBA (Visual Basic for Application) で変数に代入された文字列をコードとして実行するサンプルプログラムです。
VBA にて文字列変数に入れられた値をコードとして評価して実行したい場合があります。variable(変数)をcode(コード)としてevaluate(評価)するということです。
例えば code という変数に以下の値が入っていたとします。
code = "msgbox ""HELLO WORLD"""
これを実行するということです。実行すると msgboxが表示されます。
いろいろと応用、活用できると思います。Excelのシートにコードを記載して、1行読みながら実行するなどです。学習向けなどによいかもしれません。
ただし関数のマニュアルを検索しましたが、該当する機能は見つかりませんでした。よって以下のようなコードを定義しました。
以下は Excel のVBAでのサンプルコードです。
一度変数を関数として定義します。名前は "tempFunc"です。その後実行します。
最後に変数を削除します。
原始的な方法です。もしかしたら他によい方法あるいは関数があるかもしれません。
debug する場合は下の方の Removeが含まれる行を一時的にコメントアウトしてください。VBAProject→標準モジュール、Module1で定義した関数が確認可能です。
この場合はtempFuncは手動で削除してください。
また途中でエラーになった場合も開放されません。その場合は自動で module2,module3,module4,module5・・・のように増えてしまいます。
手動での削除(解放)が必要となります。
サンプル========================================
Sub sampleCode()
rem === 実行したいコード ===
code = "msgbox ""HELLO WORLD"""
ExecuteStringAsCode (code)
End Sub
Rem 文字列変数の内容をコードとして評価して実行する関数です。
Public Sub ExecuteStringAsCode(code As String)
Dim vbComp As Object
Rem ===== 一時的に使用する Module を追加 =====
Set vbComp = ThisWorkbook.VBProject.VBComponents.Add(1)
Rem ===== 関数を定義 =====
vbComp.CodeModule.AddFromString "Sub tempFunc" & vbCrLf & code & vbCrLf & "End Sub"
Rem ===== コードを実行 =====
Application.Run vbComp.Name & ".tempFunc"
Rem ===== 追加した一時的な module を削除 =====
ThisWorkbook.VBProject.VBComponents.Remove vbComp
End Sub
================================================
[ホーム] >
[VBScript FAQ 一覧]