【问题标题】:Translating VBS script to VBA and executing via Excel将 VBS 脚本翻译成 VBA 并通过 Excel 执行
【发布时间】:2015-11-23 07:29:01
【问题描述】:

我希望将 VBScript 转换为 VBA 并在 Excel 模块中运行它。过去我已经将“VB”翻译成它的 VBA 等价物,但这次我遇到了一些麻烦。我做了几次尝试(好吧,也许是很多尝试)试图自己翻译这个但没有成功。

然后我搜索了 Google、我在 Google 上找到的堆栈和其他论坛,但我找到的一些示例收效甚微。

是否可以从 Excel 模块执行以下操作? (作为旁注,我正在尝试直接与应用程序交互。我在此脚本之外还有其他模块,它们使用 OLE 自动化并引用适当的 COM/库引用来执行此操作)。但是,该应用程序缺乏大量文档,而且我可以通过上述 DLL 获得的方法和属性非常有限。

因此,这是我的解决方法(尽管不是首选),尽管它可能很糟糕,但它似乎有效。我目前有一个运行 VBScript 的 BAT 文件,它运行良好。现在我只需要从模块中运行代码。我尝试将脚本作为对象插入并运行从 Excel 中执行它的宏,但我得到了安全提示(而且这些提示并不有趣)。

非常感谢任何帮助!

Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 1000
WshShell.AppActivate "Average Terminal Emulator"
WScript.Sleep 1000
WshShell.SendKeys "%"
WshShell.SendKeys "I"
WshShell.SendKeys "Y"
WshShell.SendKeys "S"
WScript.Sleep 1000
WshShell.AppActivate "Average Terminal Emulator"
WScript.Sleep 1000
WshShell.SendKeys "0"
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "M"
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "C"
WshShell.SendKeys "{TAB}"
WScript.Sleep 1000
WshShell.SendKeys "{ENTER}"

【问题讨论】:

    标签: excel vba vbscript translate


    【解决方案1】:

    SendKeys()AppActivate() 是 VBA 原生的,因此您可以删除所有 WshShell 内容,包括创建它的 CreateObject() 调用。

    然后只需替换以下每个实例:

    WScript.Sleep 1000
    

    与:

    Application.Wait Now() + TimeValue("00:00:01")
    

    你应该没事的。

    【讨论】:

    • 我过去使用过SenKeys,只是一个注释——OP 可能需要在其中一些之间添加几个Application.Wait。我注意到,由于 Excel 尽可能快地运行宏,所以有时 SendKeys 正在操作的程序跟不上。
    • @BruceWayne - 这是一个很好的观点。 SendKeys 几乎从来都不是最好的解决方案,所以如果你要使用它,你需要使用它并在两次按键之间调整你的等待时间。
    • 我同意 - 在运行我的 SendKeys 宏时,我什至不电脑,在运行 SendKeys 时,因为它太挑剔了。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2012-03-13
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多