
Visual Basic 2005におきまして
変数に文字列で指定したコード(関数)を実行する方法を探しております。
たとえば、下記のコードで、変数funcStringで指定した関数を実行して戻り値を得たいと思っております。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim funcString As String = "testFunc(3,5)"
'ここで上記funcStringで指定した関数を実行して戻り値を得たい。
End Sub
'テスト用の関数
Private Function testFunc(ByVal a As Integer, ByVal b As Integer) As Integer
testFunc = a + b
End Function
Microsoft.JScript.Eval.JScriptEvaluateを利用して文字列をコードとして評価する方法を試しましたが、VBで定義してある関数を呼び出すことはできませんでした。
PHPやJavascriptでいうところのeval関数
PHPのcall_user_func関数
と同じようなことを実現したいと思っております。
いろいろ探してみたのですが、解決策が見つからず、
文字列を解析してSELECT CASEによる分岐で実行する関数を1つずつ振り分けるしか方法はないのかもと思っているのですが、今の開発仕様では100近くの関数に関してこの処理をSELECTで分岐することになりそうなのです。
なにとぞ、よき解決方法がありましたら、お力添えよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
関数のアクセス定義を Publicにして CallByNameを使えば出来そうですよ
関数の処理をフォームや任意のクラスに定義します
dim sRet as string
dim objCls as new myClass
sRet = CallByName( objCls, "testFunc", CallType.Method, "3", "5")
といった具合です ...
この回答への補足
ありがとうございます。
クラスに関数を持たせることにより、呼び出しに成功しました。
これだけでも、かなり楽になるのですが、
trueまたはfalseを返す関数testFunc1~testFunc9までが定義されているとして
あらかじめテキストで用意された
objCls.testFunc1(1,2) or objCls.testFunc1(2,3) or objCls.testFunc1(1,3) and objCls.testFunc2(1,3)
の真偽を判別を行いたい場合、さらに何か便利な方法はございますでしょうか。
真偽を判別するコード自体は別ソフト(具体的にはウェブアプリケーションでグラフィカルに)で生成したのち整形しvb.netアプリに渡すことを考えております。
vb.net側で楽できるように、整形してからコードテキストを渡したいと考えております。
良いアイデアがありましたらなにとぞご教授よろしくお願いします。
No.1
- 回答日時:
>>文字列を解析してSELECT CASEによる分岐で実行する関数を1つずつ
>>振り分けるしか方法はないのかもと思っているのですが、
>>今の開発仕様では100近くの関数に関してこの処理をSELECTで分岐
>>することになりそうなのです
___________________________________________________________
難しいかも・・・
ほかの方法ではだめなのでしょうか?
クラスをひとつ作成し、その中に複数メソッドを定義、継承やポリモーフィズムによる 解決はできないでしょうか。
文字列をセットしているところで必要な値をクラスのプロパティに渡し、クラスのメソッドを呼び出せばいいのでは・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Form2の変数をForm1に渡す方法...
-
オブジェクト指向とは?
-
VBAで、Functionを、クラスモジュール...
-
現在使用しているJAVAファイル...
-
VB.netで、動的な型変換を行い...
-
VB6で外部から静的アクセスが可...
-
【.NET】DataSetについて
-
[VBA] Classから他のClassを呼...
-
VBA(エクセル)で自動的にボタン...
-
VBA シートのボタン名を変更し...
-
worksheetFunctionクラスのVloo...
-
実行時エラー -'-2147417848
-
「Columns("A:C")」の列文字を...
-
実行時エラー 438になった時の...
-
ユーザーフォームを表示中にシ...
-
カメラスクロールするのを動画...
-
Excel VBA で End Subのところ...
-
なぜこんな初歩的なVBAのIf文で...
-
セルをマクロのボタンにしたい。
-
パソコンへの「Dropbox...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[VBA] Classから他のClassを呼...
-
共通モジュールでDBへの接続と...
-
他のモジュールのプロシージャ...
-
用語の意味の違いを教えてくだ...
-
VB.netで、動的な型変換を行い...
-
Excel vbaで複数のテキストボッ...
-
VB.NETにて文字列で指定した関...
-
WPFでCanvas の子要素にアクセ...
-
バウンドプロパティとは?
-
VBAで、Functionを、クラスモジュール...
-
VB6で外部から静的アクセスが可...
-
Visual-C#の event キーワー...
-
【JSF】バッキングビーンから別...
-
VBA オブジェクト追加
-
C# Process.Start で標準入力
-
オブジェクト指向とは?
-
【.NET】DataSetについて
-
C#でのWebRequestでのPOSTについて
-
Python クラスとモジュールの...
-
'StructLayout' の仕様について
おすすめ情報