Ejecutar una macro externa en Excel

02/11/2004 - 13:04 por Enrique | Informe spam
Hola, estoy intentando ejecutar una macro de Excel desde C#, pero no puedo.
No quiero ejecutar una macro q ya está en el .xls, lo q quiero es pasar yo
el string con la macro y q se ejecute en Excel.
Es q tengo varios ficheros excel y no puedo ni quiero añadirles macros.

La macro la he creado en excel pero el código lo tengo en un xml o tengo
el 'string' directamente en el codigo.

Se puede hacer? Pq toda la documentación q he visto es para ejecutar
macros q están incluidas en el fichero .xls. Con q función puedo hacer esto?

Gracias.

Preguntas similare

Leer las respuestas

#1 Daniel Chang [MSFT]
04/11/2004 - 03:41 | Informe spam
Hola Enrique,

Antes que nada, debes habilitar la opción "Confiar en el acceso a proyectos
de Visual Basic" en la pestaña "Editores de confianza" en Herramientas >
Macro > Seguridad... en Excel. Luego sales de Excel para que la opción tenga
efecto.

En tu proyecto C# en Visual Studio, agrega una referencia a Excel (me
supongo que tienes instalado el PIA para Excel). Luego prueba el siguiente
código que te doy como ejemplo:

using System;
using vbe = Microsoft.Vbe.Interop;
using xl = Microsoft.Office.Interop.Excel;

namespace ExcelVbaTest
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
//Cargar Excel y agregar un libro
xl.ApplicationClass xlApp = new xl.ApplicationClass();
xlApp.Visible = true;
xlApp.Workbooks.Add(Type.Missing);

//Agregar un modulo de VB y el codigo del archivo vbaTest.txt
vbe.VBComponentClass vbComp = (vbe.VBComponentClass)
xlApp.VBE.ActiveVBProject.VBComponents.Add(vbe.vbext_ComponentType.vbext_ct_StdModule);
vbComp.CodeModule.AddFromFile(@"C:\vbaTest.txt");

//Ejecutar la macro: Ejemplo
xlApp.Run("Ejemplo", Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
}
}
}


En vbaTest.txt, tengo la siguiente macro:
Sub Ejemplo()
MsgBox "Funciona!"
End Sub


Espero que esto te sirva.

Saludos,

Daniel

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no
otorga ningún derecho.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm



"Enrique" wrote in message
news:
Hola, estoy intentando ejecutar una macro de Excel desde C#, pero no
puedo.
No quiero ejecutar una macro q ya está en el .xls, lo q quiero es pasar yo
el string con la macro y q se ejecute en Excel.
Es q tengo varios ficheros excel y no puedo ni quiero añadirles macros.

La macro la he creado en excel pero el código lo tengo en un xml o tengo
el 'string' directamente en el codigo.

Se puede hacer? Pq toda la documentación q he visto es para ejecutar
macros q están incluidas en el fichero .xls. Con q función puedo hacer
esto?

Gracias.
Respuesta Responder a este mensaje
#2 Daniel Chang [MSFT]
04/11/2004 - 03:44 | Informe spam
Hola Enrique,

Antes que nada, debes habilitar la opción "Confiar en el acceso a proyectos
de Visual Basic" en la pestaña "Editores de confianza" en Herramientas >
Macro > Seguridad... en Excel. Luego sales de Excel para que la opción tenga
efecto.

En tu proyecto C# en Visual Studio, agrega una referencia a Excel (me
supongo que tienes instalado el PIA para Excel). Luego prueba el siguiente
código que te doy como ejemplo:

using System;
using vbe = Microsoft.Vbe.Interop;
using xl = Microsoft.Office.Interop.Excel;

namespace ExcelVbaTest
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
//Cargar Excel y agregar un libro
xl.ApplicationClass xlApp = new xl.ApplicationClass();
xlApp.Visible = true;
xlApp.Workbooks.Add(Type.Missing);

//Agregar un modulo de VB y el codigo del archivo vbaTest.txt
vbe.VBComponentClass vbComp = (vbe.VBComponentClass)
xlApp.VBE.ActiveVBProject.VBComponents.Add(vbe.vbext_ComponentType.vbext_ct_StdModule);
vbComp.CodeModule.AddFromFile(@"C:\vbaTest.txt");

//Ejecutar la macro: Ejemplo
xlApp.Run("Ejemplo", Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
}
}
}


En vbaTest.txt, tengo la siguiente macro:
Sub Ejemplo()
MsgBox "Funciona!"
End Sub


Espero que esto te sirva.

Saludos,

Daniel

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no
otorga ningún derecho.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm



"Enrique" wrote in message
news:
Hola, estoy intentando ejecutar una macro de Excel desde C#, pero no
puedo.
No quiero ejecutar una macro q ya está en el .xls, lo q quiero es pasar yo
el string con la macro y q se ejecute en Excel.
Es q tengo varios ficheros excel y no puedo ni quiero añadirles macros.

La macro la he creado en excel pero el código lo tengo en un xml o tengo
el 'string' directamente en el codigo.

Se puede hacer? Pq toda la documentación q he visto es para ejecutar
macros q están incluidas en el fichero .xls. Con q función puedo hacer
esto?

Gracias.
Respuesta Responder a este mensaje
#3 melvinherrera
30/12/2011 - 00:05 | Informe spam
Daniel Chang [MSFT] escribió el 04/11/2004 03:44 :
Hola Enrique,

Antes que nada, debes habilitar la opción "Confiar en el acceso a
proyectos
de Visual Basic" en la pestaña "Editores de confianza" en
Herramientas >
Macro > Seguridad... en Excel. Luego sales de Excel para que la
opción tenga
efecto.

En tu proyecto C# en Visual Studio, agrega una referencia a Excel (me
supongo que tienes instalado el PIA para Excel). Luego prueba el siguiente
código que te doy como ejemplo:

using System;
using vbe = Microsoft.Vbe.Interop;
using xl = Microsoft.Office.Interop.Excel;

namespace ExcelVbaTest
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
//Cargar Excel y agregar un libro
xl.ApplicationClass xlApp = new xl.ApplicationClass();
xlApp.Visible = true;
xlApp.Workbooks.Add(Type.Missing);

//Agregar un modulo de VB y el codigo del archivo vbaTest.txt
vbe.VBComponentClass vbComp = (vbe.VBComponentClass)
xlApp.VBE.ActiveVBProject.VBComponents.Add(vbe.vbext_ComponentType.vbext_ct_StdModule);
vbComp.CodeModule.AddFromFile(@"C:vbaTest.txt");

//Ejecutar la macro: Ejemplo
xlApp.Run("Ejemplo", Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
}
}
}


En vbaTest.txt, tengo la siguiente macro:
Sub Ejemplo()
MsgBox "Funciona!"
End Sub


Espero que esto te sirva.

Saludos,

Daniel

Este mensaje se proporciona "como está" sin garantías
de ninguna clase, y no
otorga ningún derecho.
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm



"Enrique" wrote in message
news:
Hola, estoy intentando ejecutar una macro de Excel desde C#, pero no
puedo.
No quiero ejecutar una macro q ya está en el .xls, lo q quiero es pasar
yo
el string con la macro y q se ejecute en Excel.
Es q tengo varios ficheros excel y no puedo ni quiero añadirles macros.

La macro la he creado en excel pero el código lo tengo en un xml o
tengo
el 'string' directamente en el codigo.

Se puede hacer? Pq toda la documentación q he visto es para ejecutar
macros q están incluidas en el fichero .xls. Con q función
puedo hacer
esto?

Gracias.




Excelente aporte, funciona sin ningun problema.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida