2011-12-09 17 views
0

私は通常プログラミング用にVB.Netを使用しますが、スクリプトの実行にスクリプトコントロールを使用することで利益を得るVBAプロジェクトに委任されています。ここにサンプルコードがありますが、コードの.Run行にエラーがあります。私はVB.Netで簡単にこれを行うことができますが、それをVBAで動作させることはできません。スクリプト制御対象から.Eval機能を使用して引数または無効なプロパティassignentVBAでのMSスクリプトコントロール

Option Explicit 
Dim sc As New ScriptControl 

Sub RunFunctions() 
    MsgBox (Eval("2 * PI")) 
End Sub 

Function Eval(expr As String) As Object 
    Dim code As String 
    code = "Dim PI" & vbCrLf & _ 
      "PI = 3.1416" & vbCrLf & _ 
      " " & vbCrLf & _ 
      "Function Result" & vbCrLf & _ 
      " Result = " & expr & vbCrLf & _ 
      "End Function" 

    sc.Language = "VBScript" 
    sc.AllowUI = True 
    sc.AddCode (code) 
    Dim myparams() as variant 

    Eval = sc.Run("Result", myparams) 

End Function 

ERROR =間違った番号は、VBAで[OK]を実行しますが、スクリプトを実行しません。ここで誰かが...

Sub SimpleTask() 
    Dim expr As String 
    sc.Language = "VBScript" 
    expr = "2 + 2 * 50" 
    MsgBox sc.Eval(expr) 
End Sub 
+3

指が単語「エラー」または「例外」または「アクセス違反」と入力すると、彼らは入力を開始する必要があり非常に次のことは、*正確な*エラーはエラーメッセージ、およびメモリアドレスなど、あるものです。 "それは誤りです"と書くことは絶対に無意味です。情報を提供すると、たとえメッセージやアドレスがあなたに何も意味しない場合であっても、あなたに助けを求めている人々にとっては役に立つことがあります。あなたの質問を編集し、追加の詳細を入力してください。ありがとう。 :) –

+0

ああ私はそこに置くことを意味した。少しトリガーを受けた – TroyS

+0

後に "機能結果"のrequire()がありませんか? (vbscriptでは少し錆びているので、引数が渡されなければ100%確実ではないと確信しています) – Eddy

答えて

1

は次のとおりです。コンパイルし、正しく実行あなたのコードを使用して完全な形でここ

更新

Eval = sc.Run("Result", myparams) 

から

Eval = sc.Run("Result") 

にこの呼び出しを変更してみてくださいVBAの最終作業コードです。 Competent_techにはVB.Net用のcompetent_techがあります。

Option Explicit 
Dim sc As New ScriptControl 

Sub RunFunctions() 
    MsgBox (Eval("2 * PI")) 
End Sub 

Function Eval(expr As String) As String 
    Dim code As String 
    code = "Dim PI" & vbCrLf & _ 
      "PI = 3.1416" & vbCrLf & _ 
      " " & vbCrLf & _ 
      "Function Result" & vbCrLf & _ 
      " Result = " & expr & vbCrLf & _ 
      "End Function" 

    sc.Language = "VBScript" 
    sc.AllowUI = True 
    sc.AddCode (code) 

    Eval = sc.Run("Result") 

End Function 
2

を知ることが気にならば、私は問題がsc.Runにあなたのパラメータであると思うの一例です。ここで

Option Explicit On 
Option Strict On 

Imports MSScriptControl 

Public Class Form1 

    Dim sc As New ScriptControl 

    Sub RunFunctions() 
     MsgBox(Eval("2 * PI")) 
    End Sub 

    Function Eval(expr As String) As Object 
     Dim code As String 
     code = "Dim PI" & vbCrLf & _ 
       "PI = 3.1416" & vbCrLf & _ 
       " " & vbCrLf & _ 
       "Function Result" & vbCrLf & _ 
       " Result = " & expr & vbCrLf & _ 
       "End Function" 

     sc.Language = "VBScript" 
     sc.AllowUI = True 
     sc.AddCode(code) 
     Dim myparams() As Object 

     Eval = sc.Run("Result") 

    End Function 
    Sub SimpleTask() 
     Dim expr As String 
     sc.Language = "VBScript" 
     expr = "2 + 2 * 50" 
     MsgBox(sc.Eval(expr)) 
    End Sub 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     SimpleTask() 
     RunFunctions() 
    End Sub 
End Class 
+0

お返事ありがとうございます。 Eval = sc.Run( "Result")に(Object変数またはWithブロック変数が設定されていません)取得しています。スクリプトに何が間違っているかわからない – TroyS

+0

あなたの答えとTimsの回答の間に私は解決することができました。再度、感謝します。 – TroyS

+0

あなたは正しいです。それはVB.Netで動作します。 – TroyS