Si encuentras algún detalle que no comprendes puedes dejarlo en los comentarios y trataremos de ayudarte rápidamente.
Solución:
Sí, es posible.
En realidad, hay bastantes formas y espero que les gusten mis ejemplos.
Para demostrar esto, creo un programa en el que se envía un texto como argumento y el programa responde con una versión alterada del mismo. Hice un frasco ejecutable de él. El primer ejemplo lee el argumento de args y otro de la entrada estándar.
Archivo Hola.java y H1.jar:
public class Hello
public static void main(String[] args)
StringBuilder sb = new StringBuilder("Hello");
if (args.length > 0)
sb.append(' ').append(args[0]);
System.out.println(sb.append('.').toString());
Archivo Hola2.java y H2.jar:
import java.util.Scanner;
public class Hello2
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder("Hello");
sb.append(' ').append(sc.nextLine());
System.out.println(sb.append('.').toString());
Puede guardarlos en un solo contenedor, pero luego necesita crear y usar un manifiesto (eso es un poco excesivo).
Ahora, en Excel, agrego un módulo y una referencia a Windows Script Host Object. Si no te gusta el sleep
entonces puedes reemplazarlo con DoEvents
:
'add a reference to Windows Script Host Object Model
'for example : Tools-References
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub RunSleep( _
exec As WshExec, _
Optional timeSegment As Long = 20 _
)
Do While exec.Status = WshRunning
Sleep timeSegment
Loop
End Sub
Private Function RunProgram( _
program As String, _
Optional command As String = "" _
) As WshExec
Dim wsh As New WshShell
Dim exec As WshExec
Set exec = wsh.exec(program)
Call exec.StdIn.WriteLine(command)
Call RunSleep(exec)
Set RunProgram = exec
End Function
Y para probarlo guardé los archivos en c:
conducir y usó el código:
Public Sub Run()
Dim program As WshExec
Set program = RunProgram("java -jar ""C:\H1.jar"" Margus")
Debug.Print "STDOUT: " & program.StdOut.ReadAll
Set program = RunProgram("java -jar ""C:\H2.jar", "Margus")
Debug.Print "STDOUT: " & program.StdOut.ReadAll
End Sub
En mi caso obtengo una respuesta de:
STDOUT: Hola Margus.
STDOUT: Hola Margus.
Su VBA puede escribir la salida en un archivo y Java puede sondear las modificaciones del archivo periódicamente y leer del archivo. Y vuelva a escribir los datos en VBA a través de otro archivo. VBA: la integración de Java es casi imposible a menos que solo desee iniciar un programa Java desde el shell a través de System.execute (…).
Recuerda que tienes permiso de decir si te fue útil.