gpt4 book ai didi

excel - 使用VBA完全控制另一个程序

转载 作者:行者123 更新时间:2023-12-02 10:01:05 26 4
gpt4 key购买 nike

我目前正在致力于简化工作流程。它涉及使用串行连接传输数据的 Chatillon DFIS 测力计。数据以文本形式发送到 Chattillon 程序,并且只能保存为 .dat 文件。我正在尝试设置一个 Excel 工作簿,它可以自动打开程序并使用不同的命令将信息直接放入 Excel 中。命令将涉及更改单位、将传感器调零和传输。

我环顾四周,发现 Shell 功能允许您打开文件,并且应该有助于您控制它,但我还没有找到通过 Excel 调用和操作程序的方法。

Chatillon Program ,基本上是用鼠标点击的按钮

最佳答案

Excel 和 VBA 可以控制外部应用程序如果它们有 COM 接口(interface) - 也就是说,如果您可以将应用程序声明为对象、创建该对象的实例并查看其方法和属性。

如果您可以为您的程序找到一个 COM 包装器,就这样做。

如果您不能...您将不会喜欢使用 I/O 流和 Windows Shell 对象来完成此操作,因为命令行 DOS 界面作为用户界面并不是特别友好,而且它们比当您尝试在 VBA 中将它们用作 API 时,您会在糕点厂中跳舞。

首先,您需要 Windows 脚本宿主对象模型公开的“WshShell”对象。您可以通过后期绑定(bind)来声明并实例化它,如下所示:


Dim objWshell As Object
Set objWshell = CreateObject("WScript.Shell")
但正确的方法(将为您提供属性和方法的 Intellisense 下拉菜单)是使用“工具:引用...”对话框创建对父库的引用,该引用通常位于 C:\Windows\System32\wshom.ocx

然后您可以将 Shell 对象声明为:


Dim objWshell As IWshRuntimeLibrary.WshShell
Set objWshell = New IWshRuntimeLibrary.WshShell

运行命令行可执行文件并读取 VBA 中的 I/O 流

:

这是一个打开命令窗口并运行命令行可执行文件的示例,为其提供命令行开关“-s”和封装在双引号中的参数。

请注意,我正在运行的可执行文件不是“regsvr32.exe” - 我的 shell 对象正在执行 cmd.exe,它是 I/O 流的源和接收器。

当然,您可以直接运行您的应用程序。它可能会起作用。但是,当您调用 .StdOut.ReadLine 或 .StdOut.ReadAll 时,输出流锁定或“挂起”您的调用函数及其 VBA 线程是很常见的 - 您已收到警告。


With objWshell.Exec("CMD /K")
 
    .StdIn.WriteBlankLines 3
    .StdIn.WriteLine "C:"
    .StdIn.WriteLine "CD C:\"
 
    .StdIn.WriteLine "regsvr32.exe -s " & Chr(34) & "%LIBDIR%\FXPricer.dll" & Chr(34)
    .StdIn.WriteBlankLines 1
 
    Do Until .StdOut.AtEndOfStream
        Debug.Print .StdOut.ReadLine
    Loop

    Do Until .StdErr.AtEndOfStream
        Debug.Print .StdOut.ReadLine
    Loop

    .Terminate

End With
分享并享受。并且,一如既往,请注意源代码示例中浏览器(或 StackOverflow 的文本框界面)插入的换行符。

关于excel - 使用VBA完全控制另一个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12374592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com