【发布时间】:2018-07-17 17:50:23
【问题描述】:
最新的 MS Office 更新禁用了我在 Excel VBA 中用于评估表达式的 vbscript。我发现这比过去的 VBA“评估”功能要快得多,因此希望避免这样做。
Javascript 仍然有效,所以我正在尝试迁移到它。但是,如果不重写表达式以使用 Math.Pow() 等,我们的一些更复杂的表达式(使用幂或平方根)将无法工作。
所以我的问题是我是否可以运行评估 vbscript 表达式的 javascript。
我目前正在做的示例如下:
Sub TestVBScript()
Dim objscript As New ScriptControl
Dim var As Variant
Dim str As String
objscript.Language = "vbscript"
str = "2+2"
var = objscript.Eval(str)
MsgBox str & " = " & var
End Sub
我想要的是评估 vbscript 表达式但使用 javascript,从而绕过 MS Office 错误。
这里是有关 MS Office 更新问题的信息,以防任何人感兴趣。我认为对于很多人来说可能是一个大问题: https://social.msdn.microsoft.com/Forums/en-US/45c14333-3685-4b2d-9a3a-6a109a5a2a86/access-2016-microsoft-script-control-stopped-working-error-380?forum=accessdev
感谢您的帮助!
【问题讨论】:
-
我认为不鼓励以这种方式使用 Eval /script 控件。不高效且危险。看看我能不能在上面找到什么......
-
该链接中称为Do not ever use eval! 的部分。而这个answer我不是专家。这正是我所读到的。
-
+1 与 QHarr 所说的 ^ 你应该避免像瘟疫一样避免
eval。然而,还有一个内置的Application.Evaluate()方法,但我什至对给你这个建议感到难过。 javascript 的第一条规则之一是,无论你想用 eval 做什么,没有它都可以实现,并且负面影响更少 -
虽然我不想从这些 cmets 中拿走任何东西,但使用
New ScriptControl然后使用Eval比仅使用VBA.Eval(或Eval在 JS 中)。ScriptControl.Eval有自己的作用域。如果我得到一个文本框并将其中的所有内容传递给该函数,我可能仍然能够做坏事,但这会更难。 -
谢谢。 Eval(script) 比 application.evaluate 快 10 倍以上,这就是我尝试这样做的原因。 “脚本”始终是一个简单的表达式,例如 (1+2+3^4),所以实际上我并没有运行复杂的脚本,只是将它用作评估表达式的一种手段。还有其他想法吗?
标签: javascript excel vba vbscript