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]
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
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
------
Ya sé Excel, pero necesito más.