Как использовать VBA, чтобы открыть консольное приложение и затем ввести данные? - PullRequest
0 голосов
/ 10 ноября 2018

Я сделал простое консольное приложение, которое берет данные, введенные в него, преобразует данные в правильный формат и передает их в онлайн-базу данных. Консольное приложение просто нуждается в данных, введенных в него, и оно сделает все остальное.

Например, я бы набрал что-то вроде этого: «Текст описания [Ввести]», «Имя клиента [Ввести]» и т. Д. И т. Д.

У меня есть несколько книг Excel, которые я хотел бы использовать в этом приложении. Но я не знаю, как использовать VBA для следующих действий:

  1. Запустить консольное приложение
  2. Ввод текста в консольное приложение из VBA для Excel.

Как мне это сделать? Нужно ли добавлять дополнительные ссылки для Excel? Это возможно? Если это невозможно, что бы вы порекомендовали сделать вместо этого?

Заранее спасибо! Это сообщество действительно помогло.

1 Ответ

0 голосов
/ 11 ноября 2018

В идеале, ваше консольное приложение должно принимать аргументы вместо чтения строк. Тогда вы можете просто вызвать свой исполняемый файл из 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

EDIT Вот пример для создания временного входного файла, упомянутого выше:

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
...