Для решения вашей проблемы необходим механизм связи между 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
пришел от по этой ссылке .