Передать параметр из программы VB6 exe в VBA - PullRequest
0 голосов
/ 07 марта 2020

У меня есть программа VB6 EXE для получения подстроки из строки, переданной внутри VBA. Как записать в VBA значение extract (меня не интересует функция VBA Mid)

в VB6

Private Sub Main()
 Extract (command$)
End Sub
Function Extract(StrKey As String)
    LastPoss = InStr(StrKey, "_") + 1
    Extract = Mid(StrKey, LastPoss, Len(StrKey))
End Function

в VBA

Sub test()     
 aaa = "c:\EzPasteImages\Project1.exe  "**strong text**     
 ccc = "ghhfghfgh_hgfhg"  'the parameter
 go = aaa & " " & ccc    
 RET= Shell (go)
End Sub

1 Ответ

0 голосов
/ 09 марта 2020

Для решения вашей проблемы необходим механизм связи между EXE и VBA. В настоящее время EXE ничего не делает с результатом метода Extract. Чтобы вернуть результат в VBA, поместите результат в StdOut.

Вот как это сделать на стороне EXE:

Option Explicit

Private Sub Main()
   Dim e As String
   e = Extract(Command)

   Dim fso As FileSystemObject
   Set fso = New FileSystemObject
   Dim stdOutput As TextStream
   Set stdOutput = fso.GetStandardStream(StdOut)
   stdOutput.WriteLine e
End Sub

Private Function Extract(ByVal StrKey As String) As String
   Extract = Mid(StrKey, InStr(StrKey, "_") + 1, Len(StrKey))
End Function

На стороне VBA вот как вы получаете результат от StdOut:

Option Explicit

Public Sub Test()
   Dim ret As String
   ret = ShellRun("c:\TEMP\Extract\Extract.exe" & " " & "ghhfghfgh_hgfhg")
   MsgBox ret
End Sub

Public Function ShellRun(sCmd As String) As String
   'run a shell command and return stdout as a string
   Dim oShell As Object
   Set oShell = CreateObject("WScript.Shell")
   Dim oExec As Object
   Set oExec = oShell.Exec(sCmd)
   Dim s As String
   s = oExec.StdOut.ReadAll
   ShellRun = Left(s, Len(s) - 2)
End Function

Код ShellRun пришел от по этой ссылке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...