问题标签 [msscriptcontrol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3145 浏览

c# - C# 使用带有字符串的 MSScriptControl AddObject 运行 VBScript 失败

这是我的 C# 程序:

我的 VBScript 文件内容:

最后,当我将 AddObject() 与字符串对象一起使用时,这是我的例外:

System.Runtime.InteropServices.COMException (0x800A0005):在 Program.cs 中的 Srcipting.Program.CallVbsFunction(Object p) 处的 MSScriptControl.IScriptControl.Run(String ProcedureName, Object[]& 参数) 处的过程调用或参数无效

0 投票
1 回答
2462 浏览

excel - 如何在 Microsoft Script Control 中实现事件?

我在 MSScriptControl 上阅读的所有文档都说它可以响应添加到它的对象的事件。

脚本控件允许您编写在对象上发生事件时自动触发的脚本。 https://msdn.microsoft.com/en-us/library/ms974586.aspx

ScriptControl 将能够接收由使用 AddObject 方法添加的对象生成的事件。 http://flylib.com/books/en/1.492.1.154/1/

但我这样做没有成功。我假设这意味着 ScriptControl 内的代码将在添加的对象引发它的事件时触发。我无法让任何人工作。

寻找将任何对象添加到 ScriptControl 并处理由该控件触发的事件的示例代码。不要关心对象是自定义类、窗体、控件还是内置 Excel 对象(如 Worksheet)。

在 Win Server 2008 64 位上运行 Office 2010 32 位。

对替代方法持开放态度,例如 WSH,但 Tushar Mehta 在这里没有成功http://dailydoseofexcel.com/archives/2009/08/19/using-vbscript-to-monitor-office-eventsor-not/

我已成功将 Excel Application 对象添加到 ScriptControl,并在 Excel Application 对象上执行了代码:

这没问题:

失败:

在这个测试中,m_oScriptCtl 是一个模块范围的变量。当我单击表单时没有任何反应:

下一个在 .AddCode 上报告以下错误:

预期的 ')'

在接下来的测试中,MyClass 被定义为:

但以下报告在 .Run 上“对象不支持属性或方法”。所以在这种情况下,失败的不是事件——我只是无法在类中运行方法。

线索:

有人发帖:

如果您完全无法接收事件,请尝试调用 'ScriptControl1.Modules("Global").CodeObject.Name_Of_Your_Event(ParameterList)' http://computer-programming-forum.com/59-vbscript/4b059f9f6eacfaf0.htm

- 但我不清楚这种解决方法:事件过程不应该被明确地“调用”,它们应该只是触发。TestClassEvent在上面的示例中,以下几行都给出了“找不到方法或数据成员” :

我没有测试以下内容,因为我不太确定如何:

脚本控件无法处理来自与其在 https://diigo.com/08we68中托管的应用程序相同项目中的类的事件

不确定以下是否相关,不太明白: http: //www.programmersheaven.com/discussion/79452/me-activecontrol-and-events

0 投票
1 回答
593 浏览

c# - CodeFluent 与 Interop.MSScriptControl.dll

我们有一个 32 位的服务,我们正在尝试迁移到 64 位。

我们Interop.MSScriptControl.dll用来评估用户编写的 vb 脚本。

由于没有 64 位版本的MSScriptControl. 我创建了一个在服务内部调用的进程。每次我们需要评估用户脚本时,我们都会调用该过程。在尝试了这个解决方案后,我发现它真的很慢。

我刚刚发现了CodeFluentRuntimeClient可以评估 vb 脚本和 JavaScript 的库。但是,它评估脚本的方式与MSScriptControl库完全不同。

我创建了一个简单的测试程序来评估用户编写的旧 vb 脚本。

如果我这样使用,它工作正常:

像这样它也很好用:

在之前的库中,它会自动检测将要评估的变量的类型。我可以将整数作为字符串传递,它会工作得很好。

如果我使用 ScripEngine 替换字典的值,它将失败:

另外,如果我这样做,我不会得到用户 ADMIN。

顺便说一句,我试图提供尽可能多的细节,这就是问题如此之长的原因。

0 投票
1 回答
234 浏览

vbscript - 在 MSScriptControl.ScriptControl 对象中使用 CDO.message.HTMLBody

在 c-ish 语言中,我正在实例化一个 MSScriptControl.ScriptControl 对象并使用 .AddCode 方法运行 VBScript,而后者又实例化了 CDO.Message 对象。

但是,每次我到达 "objMsg.HTMLBody = \"" + email_body + "\" \n" (注意这是在 c 中,VBScript 将是: objMsg.HTMLBody = email_body 代码行,我得到一个错误

Microsoft VBScript 编译错误:未终止的字符串常量

0 投票
1 回答
579 浏览

c# - 无法捕获 MSScriptControl 的 Eval 函数中引发的自定义异常

这是我的问题的 MVCE。

我有这个方法使用 MSScriptControl 来动态评估一些公式。

这是 Evaluator 类。

这是 CustomException 类:

我预计在这种情况下会抛出 CustomException,并输入第一个 catch 子句。但是,我得到了一个通用消息Exception(我使用 验证了异常类型GetType().Name),消息是“不能被零除”。

不过,我确实在 Evaluator 类中收到了以下错误:

XXX.dll 中出现“Library.CustomException”类型的异常,但未在用户代码中处理

如果我像这样修改我的 DoCalculate() ,那么我可以很好地捕获一个 CustomException :

这是否意味着不可能从 Eval 函数内部定义和抛出我自己的异常?

我正在使用 .NET 4.6.2 和 Interop.MSScriptControl 1.0.0.0

0 投票
1 回答
579 浏览

c# - 带有参考脚本的 VB 脚本在 ScriptControl c# 中不起作用

您好我正在使用 c# 中的脚本控件执行 VB 脚本。如果它是一个独立的脚本,那么使用下面的代码对我来说效果很好。

但是,当我尝试运行包含其他脚本引用的 VBScript 时,它不会在脚本控件中执行并引发错误。通过以下方式引用脚本中的其他脚本

!INC 本地脚本.Constants-VBScript

有没有办法在脚本控件中添加脚本的引用脚本?

0 投票
1 回答
1358 浏览

vb.net - VB.NET 用变量计算字符串

我喜欢用不同的公式填充我的数据库。

当我在数据库中有一个公式时,"(2+4)*5"我得到了结果40

当我在数据库中有一个公式时,"(x+4)*5"我得到了结果20x即使我将值设置为 ,该值也会x被忽略10

这可能吗,还是我需要第三方脚本?

顺便说一句:在 Visual Foxpro 中有一个类似EVAL(db_string).

0 投票
1 回答
134 浏览

c# - 重新定义一个类或函数

我必须向我们的 C# 应用程序添加一个 VBScript 接口,并使用ScriptControlClass(MS 脚本引擎)完成此操作。但是,我对 VBS 不太熟悉,也找不到解决方案:

如果我定义了一个类,然后决定对该类进行更改,那么当我第二次运行该类的代码时,我得到了错误:

重新定义名称

例子:

  1. 定义一个Class(例如Class test .... End Class:)
  2. “编译”(来自 C# 代码,调用ScriptControlClass.AddCode(code_for_class)
  3. 更改类的代码
  4. 再次“编译” - 在此处出现错误

在尝试编译之前如何“取消定义”类?

另外,我不是在问该类的方法Dim或对象。Redim我想修改类代码。

0 投票
1 回答
1998 浏览

javascript - 64 位 Excel VBA 调用 JavaScript 函数

我需要使用 VBA ScriptControl 对象来调用 JavaScript 函数,但它给了我一个“类未注册”错误。我已经从 Tools->References 添加了 Microsoft Script Control 1.0 我需要调用 JavaScript 以从此Rest API获取 JSON 对象以计算 Excel 宏中的值。

这篇文章告诉我 ScriptControl 仅用于 32 位。我正在使用 64 位 Excel。我也尝试使用此链接中提到的方法,但它不起作用,因为 VBA 无法识别 ActiveXObject

我的 Excel VBA 代码调用一个简单的 JS 函数:

我收到 Set jsObj = CreateObject("MSScriptControl.ScriptControl") 行的类未注册错误是否有另一种方法可以从 VBA 调用 JavaScript 函数?还是我错过了什么?

0 投票
0 回答
37 浏览

arrays - 我可以在继承的对象上覆盖 'ComVisible(false) 吗?(vb)

为我在这里可能幼稚的问题道歉,但我被困在一个我似乎遇到的问题上。

目前...

我有一个类,它继承了一个“按钮”控件(特别是 Guna 框架(nuget)的按钮),

这个类被传递给一个数组,然后被传递给一个 Scriptcontrol 类并被添加到一个 VBscript(由 .AddObject 提供)

为了让脚本控件查看对象,我似乎需要将 Comvisible 设置为 true - 我已在程序集信息中设置了它。并尝试在每个班级中声明它。

我可以将对象添加到脚本中,但是,当我尝试对脚本中的对象执行任何操作时,就会出现问题。脚本说“操作在当前状态下是不合法的” 它似乎指向 ComVisible 在依赖类或对象中为假。- 但我可能是错的,我可能是。

如果我删除继承的框架,并继承一个标准的 VS 控件(即 Button),那么脚本就可以正常工作,并且我可以访问脚本中的对象。

我是否能够继承控件并覆盖其 Comvisible 属性/强制它?有没有更好的方法来做到这一点?或者,我可能错误地将对象添加到脚本中?

我正在使用 VS2019 - vb - winforms -.net4.8

提前致谢。