【发布时间】:2019-07-07 19:35:09
【问题描述】:
(最终编辑:我最终整理的有效代码在下面,这可能是该线程中的最终回复。:-))
我正在尝试编写可以在独立的 VBScript(.vbs 文件)、.hta 文件和 VBA(例如,在 Excel 文件中)中工作的通用复制和粘贴代码。为此,我需要一些方法让代码本身告诉它正在运行的引擎。
到目前为止,我听到的最好的想法是测试某些对象是否存在,但是在 VBA 中,在编译时会失败(所以我不能用 On Error 绕过它),所以没有成功.试图找出它正在运行的文件的名称最终并不可行。这是根据代码运行在三个脚本引擎中的哪一个而做不同的事情之一。 我很想有这样简单的东西,但不知道用什么来填写:
编辑:到目前为止,大多数响应都涉及检查可能不存在的对象,这在带有 Option Explicit 的 VBA 中完全不起作用(它会引发编译时错误,因此 On Error 不起作用,并关闭 Option显式不是一个选项)。是否有其他一些回旋处/开箱即用的方式来找出这里需要什么?
Option Explicit
'--- Returns a string containing which script engine this is running in,
'--- either "VBScript", "VBA", or "HTA".
Function ScriptEngine()
If {what goes here?} Then ScriptEngine="VBS"
If {what goes here?} Then ScriptEngine="VBA"
If {what goes here?} Then ScriptEngine="HTA"
End Function
如果此项填写正确,您应该能够将该函数复制并粘贴到任何 VBA、VBS 或 HTA 文件中而无需修改、调用它并获得结果而不是错误,即使选项显式已打开. 解决这个问题的最佳方法是什么?
【问题讨论】:
-
我想我遗漏了一些东西 --- 为什么这很重要?如果您正在编写一个可以在任何地方运行的代码,那么您不应该关心它是什么引擎,对吧?
-
问题是引擎之间有一些基本的不同(例如,如何判断代码从哪个文件运行,或者如何进行延迟)。如果我有办法检测哪个引擎正在运行,我可以编写分支代码来自动处理类似的事情而无需修改。
标签: excel vba vbscript hta identification