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

2023-12-02

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

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

查蒂永计划,基本上是用鼠标点击的按钮


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

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

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

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


Dim objWshell As Object
Set objWshell = CreateObject("WScript.Shell")
But the correct method (which will give you Intellisense drop-downs of the properties and methods) is to use the 'Tools:References...' dialog to create a reference to the parent library, which is usually found at 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
Share and Enjoy. And, as always, watch out for line breaks inserted by your browser (or by StackOverflow's textbox interface) in the source code samples.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用VBA完全控制另一个程序 的相关文章

随机推荐

  • Spring 捕获index.html 的所有路由

    我正在为基于react的单页应用程序开发一个spring后端 其中我使用react router进行客户端路由 除了index html页面之外 后端还提供路径上的数据 api 为了提供我的index htmlsrc main resour
  • 如何处理 UWP 按下的后退按钮

    我曾经在 Windows Phone 8 1 XAML 中使用硬件按钮 API 但是 在 UWP 中 某些设备没有后退按钮 如何适应新的应用模式 稍微解释一下答案 你可以使用系统导航管理器 of Windows UI Core名称空间 对于
  • .NET Core 3.1 Web 应用程序与 React - 如何防止基于 Active Directory 组的访问

    我有一个 NET Core 3 1 Web 应用程序 其中包含使用 Windows 身份验证的 React 当用户输入他们的 Active Directory 凭据时 我想在允许访问 React 应用程序之前验证他们属于特定的 Active
  • ember.js 中的多个动态段

    我目前的路线定义如下 App Router map function this resource players path page id function this resource player path player id 我的想法是
  • 记录用户登录,以便报告客户端超出许可证数量

    我是商业 Windows 应用程序 c 的首席开发人员 一项新要求是跟踪滥用许可证的客户 例如 假设客户购买了 10 个用户许可协议 即在任何给定时间有 10 个并发用户 我需要能够在回顾历史记录时报告客户同时登录的用户数超过 10 的情况
  • 用户输入到二维数组中

    我对 C 完全陌生 我想要简单的代码来根据用户输入创建矩阵 E G int matrix1 new int 2 2 now using input i d like to add integers into the array matrix
  • 创建一个构建过程模板,该模板除了将所有文件复制到另一个目录外什么也不做

    我想在 TFS 2012 Express 中创建一个构建定义 它将简单地将项目源树中的所有文件复制到驱动器上的另一个文件夹中 只是强调 我不希望构建输出转到另一个目录 我希望源文件本身 原因是我让 IIS 指向特定文件夹 并且我希望构建将最
  • 在 django-webodt 中使用可变图像

    有人使用吗django webodt 浏览文档 我找不到有关在文档中使用图像的任何内容 我想在 ODT 文档中插入 可变 图像 ImageField 这可能吗 我正在使用 OpenOffice 后端 我不知道这是否适合你 我使用pod在我的
  • Rust 中 Result 中的“T”代表什么?

    官方文档做了很多参考T enum Result
  • 无法使用 Express 发布 / 错误

    我正在尝试使用express 创建一个简单的表单处理程序 我为我的表单尝试了以下代码
  • C/C++ 中的整数除法会遇到精度损失问题吗?

    假设我们有三个整数 int long long long unsigned int 等 变量a b c 通常情况下 执行 c a b 将导致分数截断 但是 c 有可能得到错误的值吗 我不是在谈论 a b 可能超出范围c s type 相反
  • 从 Parse 查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit?

    我正在尝试查询存储在 Parse 后端的 PFGeoPoints 数组 我在 Parse 中有一个名为 Post 的 PFObject 并为其分配了 位置 标题 消息 等数据 从我的应用程序发布后 所有内容都会发送到 Parse 并正确存储
  • playframework中的多个文件上传

    我在上传多个文件时遇到一些问题 当我选择x个文件时 它成功通过 但第一个文件正在上传x次 而其他文件根本没有上传 有人能指出我做错了什么吗 Form form Projects uploadPictures project id encty
  • 从 HTML 表中检索过滤后的数据并将其格式化为数组

    我一直在 PHP 系统中开发一个函数 我可以在其中过滤记录 然后将其导出到具有使用 PHPSpreadSheet 模板的 Excel 我的问题是我不知道如何检索上面标题中所述的过滤记录 我想我的代码中遗漏了一些东西 这是我将记录从数据库提取
  • 使用 R 中的 3d Delaunay 三角面板绘制球体表面

    EDIT 更通用的解决方案可以在答案中看到这个问题 我想知道是否有人可以帮助我使用 XYZ 坐标绘制球体表面的近似值 我尝试使用该包计算 Delaunay 三角面板geometry然后用rgl 第一次尝试看起来不错 但不幸的是创建了穿过球体
  • 通过ajax和php动态更新页面

    我想通过ajax将数据提交到数据库 并将数据插入数据库后 该数据应该显示在文件上演示 html最后动态地 即在我的例子中的 div 之后 我已经通过ajax存储数据了 但我不知道如何显示这个新插入的数据演示 html 所以请指导我如何实现这
  • 让长字符串换行的好方法?

    在我的项目中 我有一堆从文件中读取的字符串 其中大多数在命令控制台中打印时 长度超过 80 个字符并且环绕 看起来很难看 我希望能够让 Python 读取该字符串 然后测试它的长度是否超过 75 个字符 如果是 则将字符串拆分为多个字符串
  • 在所有服务器上删除触发器

    我有一个触发器来阻止某人使用 Management Studio CREATE TRIGGER TR LOGON APP ON ALL SERVER FOR LOGON AS BEGIN DECLARE program name NVARC
  • 无法将 list 传输到 Web 服务?

    我的服务器和网络服务上有相同的类 我有以下 WebMethod WebMethod public int CreateOrder List
  • 使用VBA完全控制另一个程序

    我目前正在致力于简化工作流程 它涉及使用串行连接传输数据的 Chatillon DFIS 测力计 数据以文本形式发送到 Chattillon 程序 并且只能保存为 dat 文件 我正在尝试设置一个 Excel 工作簿 它可以自动打开程序并使