Ejecutar una Macro de Excel desde VB.NET

25/09/2008 - 15:50 por Consuelo | Informe spam
Hola,

Tengo un pequeño problema a la hora de ejecutar Excel 2003 desde un programa
VB.NET 2005, concretamente el problema se produce al llamar a una macro que
está en un complemento de Excel (AddIn) hecho por mi, pues no soy capaz de
que el programa VB.NET encuentre dicha macro.

Lo que hago es exactamente esto :

Private Sub BTCompras_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BTCompras.Click
Dim Excl As New Microsoft.Office.Interop.Excel.Application
Try
If Excl.AddIns("SolCompra").Installed = False Then
MsgBox("No está instalada la solicitud de Compra")
BTCompras.Enabled = False
Excl.Quit()
Exit Sub
End If
Excl.Visible = True
Excl.Run(Excl.AddIns("SolCompra").FullName + "!Haz_Solicitud")

Catch ex As Exception
MsgBox(ex.Message)
Try
Excl.Quit()
End If
Catch
End Try
End Try
End Sub

He hecho varias pruebas al poner el nombre de la macro:
- Si pongo solo el nombre de la macro: Excl.Run( "Haz_Solicitud") dice: No
se puede encontrar la macro "Haz_Solicitud".

- Si pongo también el nombre del fichero XLA que contiene la macro :
Excl.Run( "SolCompra.xla!Haz_Solicitud") dice: No se puede hallar
"SolCompra.xla".

- Si pongo el path completo del fichero XLA :
Excl.Run(Excl.AddIns("SolCompra").FullName + "!Haz_Solicitud") dice: No se
puede encontrar la macro "C:\Archivos de programa\Microsoft
Office\OFFICE11\MACROS\SolCompra.xla!Haz_Solicitud".

Evidentemente la macro existe y se llama así, pues si desde un modulo VBA de
Excel hago las mismas llamadas, estas se ejecutan correctamente en el primer
y segundo caso, fallando de la misma manera en el tercero (Run
(AddIns("SolCompra").FullName + "!Haz_Solicitud")).

¿Puede alguien ayudarme a encontrar una solución a este problema?

Muchas gracias

Consuelo

Preguntas similare

Leer las respuestas

#1 Ivan
25/09/2008 - 18:08 | Informe spam
hola Consuelo,

no me hagas mucho caso, pero prueba a 'abrir' tambien el complemento
antes de ejecutar la macro

a ver que tal

un saludo
Ivan
Respuesta Responder a este mensaje
#2 Ivan
25/09/2008 - 19:28 | Informe spam
hola de nuevo, Consuelo

Si sigue sin funcionarte, prueba a referenciar tambien el complemento
y trabaja directamente sobre/con el, aunque =>

otra posible causa (o quizas otra mas) es que, mirando tu codigo
realmente no estas trabajando con ningun libro, solo con la aplicacion
excel.

y, si no me equivoco, para operar con codigo vba (el complemento) debe
haber al menos un libro abierto, y, de nuevo si no recuerdo mal, el
libro que contiene la macro debe estar abierto

ten en cuenta que siempre que trabajas con algun complemento en excel
lo haces con/desde un libro, que en este caso no existe

prueba a crear tambien un objeto workbook y ejecutar la macro.

de todas formas los complementos no son mi fuerte, pero te pego un
fragmento de la ayuda de excel sobre el tema =>


Para devolver una referencia al libro correspondiente a un complemento
cargado, utilice Workbooks(índice), donde índice es el nombre de
archivo del complemento (no su título). Se debe utilizar el nombre de
archivo porque los complementos cargados no aparecen normalmente en el
conjunto Workbooks. Este ejemplo establece la variable wb como el
libro de Myaddin.xla.

Set wb = Workbooks("myaddin.xla")
El ejemplo siguiente establece la variable wb como el libro del
complemento Analysis Toolpak.

Set wb = Workbooks(AddIns("analysis toolpak").Name)
Si la propiedad Installed devuelve True, pero las llamadas a las
funciones del complemento siguen fallando, es posible que éste no se
haya cargado realmente. Esto se debe a que el objeto Addin representa
la existencia y el estado de instalado del complemento pero no
representa el contenido real del libro del complemento. Para
garantizar que un complemento instalado esté cargado, se ha de abrir
el libro del complemento. En el siguiente ejemplo se abre el libro
correspondiente al complemento denominado "My Addin" si éste no está
presente todavía en el conjunto Workbooks.

On Error Resume Next ' turn off error checking
Set wbMyAddin = Workbooks(Addins("My Addin").Name)
lastError = Err
On Error Goto 0 ' restore error checking
If lastError <> 0 Then
' the add-in workbook isn't currently open. Manually open it.
Set wbMyAddin = Workbooks.Open(Addins("My Addin").FullName)
End If

espero te ayude

un saludo
Ivan
Respuesta Responder a este mensaje
#3 Heureta
29/09/2008 - 09:08 | Informe spam
Hola Ivan, Soy Consuelo aunque desde casa por unas inoportunas
anginas, por lo que no puedo probar las indicaciones que me has dado,
en cuanto pueda volver a la oficina las pruebo y te cuento el
resultado.

Muchísimas gracias

Consuelo




On 25 sep, 19:28, Ivan wrote:
hola de nuevo, Consuelo

Si sigue sin funcionarte, prueba a referenciar tambien el complemento
y trabaja directamente sobre/con el, aunque =>
Respuesta Responder a este mensaje
#4 Consuelo
02/10/2008 - 11:21 | Informe spam
FUNCIONA !!!

Mil gracias Ivan por la pista que me has dado, ha sido definitiva!
Al final no hay que poner el nombre completo del fichero XLA en la llamada
Run, solo el nombre de la macro.

Por si alguien se encuentra con el mismo problema o similar, copio la
versión definitiva de mi rutina por si puede servir de ayuda:

Private Sub BTCompras_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BTCompras.Click
Dim Excl As New Microsoft.Office.Interop.Excel.Application
Try
If Excl.AddIns("SolCompra").Installed = False Then
MsgBox("No está instalada la solicitud de Compra")
BTCompras.Enabled = False
Excl.Quit()
Exit Sub
End If
Dim AddI As Microsoft.Office.Interop.Excel.Workbook
Try
AddI = Excl.Workbooks(Excl.AddIns("SolCompra").Name)
Catch ex As Exception
AddI = Excl.Workbooks.Open(Excl.AddIns("SolCompra").FullName)
End Try
Excl.Visible = True
Excl.Run("Haz_Solicitud")
Catch ex As Exception
MsgBox(ex.Message)
Try
If Not Excl Is Nothing Then
Excl.Quit()
End If
Catch
End Try
End Try
End Sub

Repito mi agradecimiento y hasta otra!

Saludos

Consuelo
Respuesta Responder a este mensaje
#5 Ivan
02/10/2008 - 16:27 | Informe spam
Hola Consuelo,

me alegro que te haya servido [parece que definitivamente el problema
iba por la 'no' apertura del libro/complemento]

Repito mi agradecimiento y hasta otra!



gracias tambien a ti por el feedback

un saludo
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida