【问题标题】:Running code from VBA to VBScript back to VBA将代码从 VBA 运行到 VBScript 回到 VBA
【发布时间】:2013-12-31 00:27:52
【问题描述】:

我正在尝试找出一种方法来调用 VBScript 函数,在 Excel 中使用 ,然后将值传递回 。见下文

VBA 在 Excel 中

    Sub RunTest()
    Dim objString as String

    'Begin Pseudocode
    objString = Call VBScript Function Test()
    'End Pseudocode

    MsgBox objString `from VBS
    End Sub

VBScript

    Function Test
    Test = "Hello World"
    End Function

我知道这可能看起来很奇怪,因为我可以在 VBA 中编写函数,但是我们推出了一个 office 补丁,并且由于某种原因它完全杀死了我的一个宏的功能。奇怪的是,我可以在任何其他办公程序中运行完全相同的代码,只是不擅长。作为一种解决方法,我将导致 excel 崩溃的函数移动到 word 中,并使用 application.run 将其拉出,但我不想这样做,因为打开 word 应用程序来运行我的宏会减慢我的进程。

感谢您的帮助,谢谢

【问题讨论】:

    标签: vba excel-vba vba excel vbscript


    【解决方案1】:

    好吧,我觉得有点脏:)

    这段代码有两个关键部分:

    • vbs 使用GetObject 和完整的主机工作簿路径重新附加到包含VBA 的文件,该文件称为VBS
    • VBS 将值添加到主机 VBA 文件中的特定工作表以触发 Worksheet_Change 事件触发,使用从 VBS 传递的字符串运行 VBA

    第 1 步:常规 Excel 代码模块

    Sub VBA_to_VBS_to_VBA()
    Shell "wscript c:\temp\myvbs.vbs", vbNormalFocus
    End Sub
    

    第 2 步:myvbs

    Dim xlApp
    Dim xlSht
    On Error Resume Next
    Set xlApp = GetObject("c:\temp\mybook.xlsx").Application
    Set xlSht = xlApp.Sheets("vbs sheet")
    On Error GoTo 0
    If Not xlSht Is Nothing Then
    xlSht.Range("A1").Value = "hello world"
    Else
    wscript.echo "sheet not found"
    End If
    

    第 3 步:vbs 表格在 Excel 文件中的表格代码

    Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox [a1].Value, vbCritical, "VBS insertion"
    End Sub
    

    【讨论】:

    • @Tronald 你试过这个吗?
    • 我不知道为什么我从来没有注意到这是未选中的。很抱歉!
    【解决方案2】:

    尝试如下语法:

    Sub Test()
        Shell "cscript c:\TestFolder\sample.vbs", vbNormalFocus
    End Sub
    

    【讨论】:

    • 我也很感谢您的回答。我的问题的措辞一定很糟糕,因为你和布雷特给出了相同的答案。我知道我可以从 VBA 运行脚本,但我想做的是调用脚本中的特定函数并将 VBA 中的字符串对象设置为等于脚本中包含的函数的结果。有没有办法做到这一点?
    • @Tronald:我从来没有这样做过,但是 VBA 和 VBScript 都可以读/写 注册表项。您可以使用它们设计和实现接口。
    • @tronald 你不能直接从 VbS 运行所有这些 - 包括自动化 VBA - 而不是寻求在两者之间切换
    • @brettdj,如果我还没有用 VBA 构建一个巨大的野兽,那将是“有意义”的路线。我有一些多年来运行良好的程序。上周通过我们的网络推送了对办公室的更新,现在当我在工作中通过 excel 登录我的数据库时,excel 将关闭。我可以在 word 或任何其他办公产品中使用相同的代码,它工作正常,但 excel 只是在运行时关闭,这太奇怪了。设计数据库的人不再提供 SDK 支持,而我让网络管理员删除补丁或让微软修复他们破坏的问题的机会是 0
    • 我的字符用完了,所以继续……所以作为临时工作,我将数据库登录子发送到 word。我从 excel 打开一个 word 应用程序,将 word 中的代码作为函数运行,然后将 Excel 中的登录对象设置为在 Word 中运行的函数。它工作得很好,但是打开单词比运行一个简单的脚本占用更多的内存。如果我能弄清楚如何像上面描述的那样做一个简单的 hello world,我就能找到我需要的解决方法。
    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多