2010-01-26 33 views
9

¿Hay alguna manera de imprimir un mensaje a la consola desde una macro vba de Excel? Tengo una pequeña aplicación de consola VB .NET que llama a una macro de Excel, y me gustaría que los mensajes de error del código de macro se impriman en la consola. Debug.print no ayuda, ya que solo se imprime en la ventana inmediata. ¿Algunas ideas?¿Cómo puedo escribir en la consola desde el código vba de Excel?

+0

Esto se debe principalmente a la ventana Inmediato es, en efecto, la "consola" para aplicaciones de VBA. –

Respuesta

7

Descubrí que no hay comunicación entre un proyecto .NET de VB y una macro que llama: la macro no puede acceder a la consola de la VB y no puede devolver una excepción. Si se produce un error en la macro, el código VB .NET no lo detecta. El proyecto VB solo llama a la macro, se ejecuta y luego el proyecto continúa ejecutándose, sin conocimiento de lo que sucedió en la macro. La forma en que solucioné esto fue que el macro escribió el error en una celda específica designada en la hoja de cálculo de Excel, y luego el proyecto VB lo leyó y lo usó para determinar si había un error, y luego lo escribió en el consola si hubiera. Una especie de trampa, pero funcionó. ¡Gracias por todas las sugerencias!

1

Pase una ruta de archivo y escriba todos los errores en el archivo.

5

Puede probar el uso de Debug.WriteLine() para generar su información de depuración en la ventana Visual Studio Output, pero tengo la molesta sensación de que no puede hacer eso a menos que esté escribiendo una aplicación de consola.

Si de hecho no funciona, intente utilizar el método Console.SetOut() para redirigir las cadenas Console.WriteLine() a un StreamWriter, que podría ser un archivo en su máquina. No es el ideal, pero posiblemente una solución viable?

0

Puede crear un componente COM en su aplicación VB.NET al que puede llamar desde VBA y escribir en la consola de su aplicación.

+2

¿Vale la pena? No lo creo. – ChaosPandion

+0

Depende de la situación. Tenemos una aplicación .net que hace algunas cosas y luego lanza informes de Excel. Los datos para los informes se obtienen a través de una interfaz COM de VBA en Excel para que el usuario pueda personalizar el informe. Actualmente no, pero puedo ver el momento en que es posible que tengamos que mostrar las actualizaciones de estado del informe en la aplicación principal que lanzó los informes. – burnside

0

¿Por qué no devuelve una cadena que contiene los mensajes de error de la macro al código .Net, y hace que el código .Net la escriba en la consola?

Alternativamente, si estos son realmente errores, provoque errores de la macro usando Err.Raise y manipúlelos en el código .Net con un bloque Try Catch que escribe los detalles en la consola.

11

tuve que usar Debug.Print() como Debug.Write() y Console.WriteLine() no funciona

Cuestiones relacionadas