• ベストアンサー

フォームのテキストコントロールに代入された計算式を計算したい

VB.Netのイベントで、フォームのテキストコントロールに代入された計算式を計算したいのです。 (String変数に代入された値でも構いません) 計算式.textに "3*4+5"等の計算式が代入されているとします。 これを計算して結果を変数に代入させたいのですが、Textになっているので、どうすればよいか分かりません。 よい方法を教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

フォームにボタンを1つ設け(Button7) クリックイベントに Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click 'メニューの「プロジェクト」ー「参照設定の追加」 '参照設定に「Microsoft.JScript.dll」と「Microsoft.Vsa.dll」を追加 Dim exp As String = "2*(3+4)+3" Dim ve As Microsoft.JScript.Vsa.VsaEngine = _ Microsoft.JScript.Vsa.VsaEngine.CreateEngine() Dim result As Double = _ CDbl(Microsoft.JScript.Eval.JScriptEvaluate(exp, ve)) '結果を表示 MsgBox(result) End Sub ーーーー Debugして実行でボタンをクリックすると、17が返りました。 この元になるコードはWEB上に、相当数出てくるのですが、肝心なのは 'メニューの「プロジェクト」ー「参照設定の追加」 '参照設定に「Microsoft.JScript.dll」と「Microsoft.Vsa.dll」を追加 の部分が載ってない例が多く、手探りで調べてやりました。 (判っているWEB掲載者には常識と思うのかも) ーー テキストボックスの値を上記Expにセットして、コマンドボタンクリック実行で、多数の例でうまく行くか、数でなく変数文字列でどうか、など、やってませんので参考程度で考えていただき、よろしく。 VBScriptのもEVALがあるので、参照設定を旨くやれば、使えるのではないかと夢想していますが、判りません。

amamaq
質問者

お礼

ご回答ありがとうございます。 私もimogasiさんの方法でやってみたところ、17が返ってきました! いろいろ調べて頂いて本当にありがとうございました。 いろんなパターンで試してみたいと思います。m(_ _)m

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8525/19377)
回答No.1

文字列として作られた計算式を計算するライブラリや関数を自作するか、ネット上に公開されているライブラリや関数を拾って来るなど「計算してくれる何か」を自分で用意しなければなりません。 標準で用意されているのは「文字列を数とみなして数値にする物」だけです。

amamaq
質問者

お礼

ご回答ありがとうございます。 いろいろ探していますが、やはり自作しかないですかね。。。(涙)

関連するQ&A

  • アクセスでの計算フォーム

    VBの経験があるものですが、今回アクセス上で、VBのような計算フォームを作りたいと思ったのですが、エラーが出ます。 フォーム上のボタンを押すと、テキスト1~6を足して、答えのテキストに表示させるようにしたいのですが、デバッグをすると、VBの方でボタンクリックの部分で「コントロールがフォーカスを取得していないときにコントロール・・・」というエラーが出てきます。 手順として、テキストを作成し、ボタンを作成し、ボタンクリックのソース上で、テキスト1~6を足していく・・・ ということでは、まずいのでしょうか?

  • テキストボックスの値を変数に代入したい。

    テキストボックスの値を変数に代入したいのですが、どういうコードを書けばいいですか? 例えばTextBox1の値を変数xに代入したいのですが。

  • VB.Netのコントロール名の操作について

    VB.Netのコントロール名の操作について教えて下さい。 変数Aに代入されている値(コントロール名)から、そのコントロールがフォーム上に存在するかどうか判断し、存在すればそのコントロールに入力されている値を取得したいのですが、ロジックがよくわかりません。 下記のように作りましたがエラーがでます。 どなたか教えて下さいm(_ _)m Dim CntWk As Control Dim objwk As Object Dim 変数A As String For Each CntWk In objwk If cntKoumoku.Name = 変数A Then    MsgBox(cntKoumoku.Visible)  End If Next ちなみにエラーは、  「オフジェクト参照がオフジェクトインスタンスに設定されていません」と出ます。 これはロジックの問題外かと思いますが、.Netに不慣れなためよくわかりません。

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • フォームの計算結果をテーブルへ

    フォームの計算結果をテーブルに移行したいのですが、クエリーとマクロを使ったらその都度全計算してしまい時間がかかってしまします。又値の代入をしたら、少数点以下が切り捨てられてしまいした。何か良い方法はないでしょうか?

  • ExcelVBAマクロでテキストボックスの値の代入

    ExcelVBAマクロについて確認させてください。 下記のように読み込みたいファイルをフォームで指定して それを変数aに読み込ませています。 この方法の他に、ユーザーフォームでテキストボックスを 作成してテキストボックス内で文字を記入してその文字を 変数aに読み込ませることは可能でしょうか。 可能であればその方法をぜひご教授ください。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream'指定したファイルを開く     a = .ReadAll'テキスト文書の内容を文字列aに代入     .Close'指定したファイルを閉じる End With End Sub

  • VBで作成したフォーム上に電卓アプリの計算結果を反映させたい

    現在VB6.0でプログラミングをしています。VBのフォームから電卓アプリを呼び出し、その計算結果をVBのフォーム上のテキストに反映させたいのです。 電卓をsehll関数で起動させることはできるのですが・・・。 現在ネットなどでいろいろ調べているのですが行き詰っています。 何かよい方法をご存知の方がいましたら教えてください。

  • テキストコントロールの値が変わったときに知らせてくれる方法

    VB6です。 テキストコントロールに「1」を入力してそのまま処理を行いたいのですが、どこかのコードでそのテキストコントロールの値を「5」に変えているようです。 自分でコードを書いておきながら、どこで間違って変更しているのかわからなくなってしまいました。 このような場合に、該当のテキストコントロールの値が直前に変更されたその行を特定する機能はVB6にあるのでしょうか。

  • Access2000:フォームのテキストフォームに値を代入Part2

    前回も質問して、また違った改良が入りそうなので質問させていただきます。 マクロに「フォームを開く」を登録し、テキストフォーム値を入れることをこれまで手動でしてきました。 今回VBAを使って自動フォーム登録したいと考えています。 上記マクロをVisualBasic変換し、新たなマクロにこのVisualBasicをプロシージャとして登録させます。 DoCmd.OpenForm "フォーム名", acNormal, "", "", , acNormal 変換後上記のようなフォームを立ち上げるプログラムが生成されました。上記フォームのテキストフォーム部に値を代入させたいばあいどういう記述をしてあげればよろしいでしょうか? テキストフォームの名前は”年月”です。 Me![年月]=date ではうまくいきません。 よろしくお願いいたします。

  • Labelコントロールに数字を代入する

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが LabelにInt型の変数の中身を代入する方法がわかりません。 ソースコードで書くと int a = 10; label1.Text = a;//こうするとInt型をString型に変換できませんと         //で る 参考書などには数字を表示したいならTextBoxを使いなさいとよく書かれているのですが、今のプログラムはユーザーに数字の表示を変えられるといけないので、悩んでいます。 どなたかLabelにInt型を入れる方法か、ユーザーがコントロールできないようなLabelに代わるものを教えていただけないでしょうか>< よろしくお願いします。