Añadir Solver en Referencias VBA desde la propia macro

2 envíos / 0 nuevos
Último envío
visitante (no verificado)
Imagen de visitante
Añadir Solver en Referencias VBA desde la propia macro

Está claro que con añadir la referencia Solver se soluciona el problema, pero... ¿habría alguna forma de incluir código en la propia macro que lo habilitara directamente? Como ejemplo para entender a qué me refiero. Pongamos que se construye una Excel que utiliza Solver y lo llamamos mendiante un botón que lleva asociada una macro. Todo irá bien mientras se ejecute en nuestro PC, pero si esta Excel se ejecuta en otro PC o se le da a otra persona, que no tenga incluído el complemento Solver y añadido Solver como referencia VBA.... no funcionará. ¿Podría directamente la macro habilitar Solver para que funcionara en cualquier PC y en cualquier circunstancia?

Raúl

[Tema creado desde comentario en http://www.necesitomas.com/excel-vba-solver]

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 16 horas 13 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 10560
Bueno, supongo que todo es

Bueno, supongo que todo es posible.

Si abre tu archivo, con tu macro y tu referencia, también traerá la información de las referencias. Entiendo que el problema es qeu la macro no está en tu libro, sino que está en otro libro sin la referencia.

Entonces, tu macro tendrá por un lado que cargar el complemento Solver, y además añadir la referencia 

para cargar el complemento (para usarlo manualmente) basta con esta instrucción

AddIns("Solver").Installed = True

si luego quieres desactivar el complemento, pues sería similar, poniendo False

 

Una vez cargado el complemento, tendrías que añadir la referencia en VBA. En esta página explican cómo hacerlo https://stackoverflow.com/questions/9879825/how-to-add-a-reference-programmatically

basándome en este ejemplo, podría quedar algo así:

Sub AddReference(ref_nombre As String, ref_ruta As String)

Dim VBAEditor As Object 'VBIDE.VBE

Dim vbProj As Object 'VBIDE.VBProject

Dim chkRef As Object 'VBIDE.Reference

Dim BoolExists As Boolean

Set VBAEditor = Application.VBE

Set vbProj = ActiveWorkbook.VBProject

'~~> Comprobamos si ya está

For Each chkRef In vbProj.References

If chkRef.Name = ref_nombre Then

BoolExists = True

GoTo CleanUp

End If

Next

vbProj.References.AddFromFile ref_ruta

CleanUp:

If BoolExists = True Then

MsgBox "La referencia ya existe"

Else

MsgBox "Referencia añadida con éxito"

End If

Set vbProj = Nothing

Set VBAEditor = Nothing

End Sub

 

mi ruta es "C:\Program Files (x86)\Microsoft Office\root\Office16\Library\SOLVER\SOLVER.XLAM"

así que llamaría a este procedimiento así

AddReference "Solver","C:\Program Files (x86)\Microsoft Office\root\Office16\Library\SOLVER\SOLVER.XLAM"

 

Para que esto funcione, en la configuración de seguridad de Excel, hay que permitir el acceso al modelo de objetos de proyectos

 permitir acceso al modelo VBA

AdjuntoTamaño
Image icon permitiracceso_vba.png25.1 KB

 

Data Tools Suite
datos y tablas con Excel