VB.NETでEvaluate()関数を使って、プログラム実行中に決まる数式を評価させたいのですが、(1)のように数式をリテラルのまま渡せば正しく評価されるのですが、(2)のように数式を変数に代入して渡すとうまくいきません。数式の構造自体がプログラムの実行中に決まるので、数式を代入した変数を引数として渡す必要がありますが、このような場合、どのようにすればよいのでしょうか。
(1) 引き渡す数式がリテラルの場合
Imports Microsoft.Office.Interop
Module Module1
Sub Main()
Dim xlApp As New Excel.Application
Dim x As Integer
x = 1
MsgBox(xlApp.Evaluate(x = 1)) '期待 True 実際 True 結果 OK
MsgBox(xlApp.Evaluate(x <> 1)) '期待 False 実際 False 結果 OK
End Sub
End Module
(2) 引き渡す数式が代入された変数の場合
Imports Microsoft.Office.Interop
Module Module1
Sub Main()
Dim xlApp As New Excel.Application
Dim x As Integer
Dim term1 As String
Dim term2 As String
x = 1
term1 = "x = 1"
term2 = "x <> 1"
MsgBox(xlApp.Evaluate(term1)) '期待 True 実際 -2146826259 結果 NG
MsgBox(xlApp.Evaluate(term2)) '期待 False 実際 -2146826259 結果 NG
End Sub
End Module
よろしくお願いします(WindowsXP,VS2010)
お礼
term1 = x & " = 1" で できました。 また、 MsgBox(xlApp.Evaluate(x = 1)) は MsgBox(xlApp.Evaluate(x & "= 1")) としなければならないことも分かりました。 正しく動作しなかった方だけでなく、正しく動作していたと思われた方も 間違っていたわけですね。 質問してよかったです。ありがとうございました。