【问题标题】:How do I use VBA to open Console App and then enter data?如何使用 VBA 打开 Console App 然后输入数据?
【发布时间】:2019-04-14 01:28:14
【问题描述】:

我制作了一个简单的控制台应用程序,它接收输入的数据,将数据转换为正确的格式,然后将其提交到在线数据库。控制台应用只需要输入数据,剩下的就交给它了。

例如,我会输入如下内容:“描述文本 [Enter]”、“客户名称 [Enter]”等。

我有几个 Excel 工作簿,我想使用这个应用程序。但我不知道如何使用 VBA 来执行以下操作:

  1. 运行控制台应用程序
  2. 从 VBA for Excel 将文本输入控制台应用程序。

我该怎么做?我是否需要为 Excel 添加其他参考?这可能吗?如果这不可行,您会建议做什么?

提前谢谢你!到目前为止,这个社区确实提供了帮助。

【问题讨论】:

  • 无法直接帮助您解决问题,但如果您的控制台应用程序接受数据作为命令行参数,通常会更容易(argv,如果您使用的是 C/C++) .如果您不需要命令的返回值,那应该很容易,即看到这个问题:stackoverflow.com/q/2290365/2192139
  • 我可能会研究如何执行参数功能。谢谢你,@Geier!

标签: excel vba console console-application


【解决方案1】:

理想情况下,您的控制台应用程序将采用 参数 而不是读取行。然后,您可以按照here 的说明简单地从 VBA 调用您的可执行文件。

如果您无法修改控制台应用程序,您可以通过首先使用 VBA 创建一个临时文本文件来解决此问题(本网站上的许多示例)。该文件将包含您通常从键盘提供的输入。然后,您将按照链接答案中的描述调用您的可执行文件,但不是提供参数,而是使用 < 字符将临时文本文件的内容提供给程序:

Public Sub StartExeWithInputFile()
    Dim strProgramName As String
    Dim strInputFile As String

    strProgramName = "C:\Program Files\Test\foobar.exe"
    strInputFile = "C:\Data\TempInputLines.txt" '<== You have to produce this file.

    Call Shell("""" & strProgramName & """ <""" & strInputFile & """", vbNormalFocus)
End Sub

编辑 以下是创建上述临时输入文件的示例:

Sub CreateTempInputLines()
    Dim fso As Object
    Dim oFile As Object

    Set fso = CreateObject("Scripting.FileSystemObject")

    'See https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/createtextfile-method.
    Set oFile = fso.CreateTextFile("C:\Data\TempInputLines.txt", True)

    oFile.WriteLine "Description text"
    oFile.WriteLine "Customer name"

    'Cleanup.
    oFile.Close
    Set oFile = Nothing
    Set fso = Nothing
End Sub

【讨论】:

  • 很好的答案。应用程序完美打开,文字书写正确。一切正常除了控制台应用程序的输入;它只是空白。我什至可以复制 .txt 文件的内容,并且可以正常工作。知道它可能是什么吗?
  • 也许您在关闭 VBA 中的文本文件之前启动了控制台应用程序?在您关闭它之前,数据可能不会写入文本文件。
  • 在 Shell 行放置一个断点并 Debug.Print 括号内的内容。复制结果并将其粘贴到命令窗口中。发生什么了?注意:我已经构建了一个控制台应用程序,它只调用 Console.ReadLine(),它可以工作。
  • 编辑了我的答案以对齐文本文件的跨子路径;可以解释为什么它不起作用。当然,请确保在调用 Shell 之前创建、写入和关闭文本文件。
猜你喜欢
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2015-09-19
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多