VBAで文字変数の内容をコードとして評価して実行する | VBScript / VBA FAQ

[FAQ CENTER トップ]
[VBScript FAQ トップへ]

VBScript / VBA 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 トップへ]
[FAQ CENTER トップ]





(ご注意) 本サイト内の内容を使用して発生したいかなる時間的損害、金銭的損害あるいはいかなる損害に対して、いかなる人物も一切の責任を負いません。あくまでも個人の判断で使用してください。
本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。
このページはリンクフリーです。(このページへの直接リンクも可能です。)
雑誌等での紹介は特に連絡は不要です。
Copyright(c) tooljp.com 2007-2014