Ejecución de macro para solver desde un botón

Tengo una macro para solver pero necesito que al ejecutarla mediante un botón que ya lo tengo en la hoja de cálculo, no se me muestre la pantalla "parámetros de solver" ni la de "resultados de solver".
El código que tengo es el siguiente:
Sub Dia1()
' Celda objetivo y celdas cambiantes
Solverok setcell:=Range("C10"), maxminval:=1, _
bychange:=Range("AK3:BE3")
' RESTRICCIONES
'Disponibilidad de recursos
SolverAdd CellRef:=Range("X27:X40"), Relation:=1, _
FormulaText:="$Z$27:$Z$40"
' Escasez Cero
SolverAdd CellRef:=Range("X42:X62"), Relation:=3, _
FormulaText:="$Z$42:$Z$62"
' Capacidadd de almacen
SolverAdd CellRef:=Range("X64:X84"), Relation:=1, _
FormulaText:="$Z$64:$Z$84"
' Muestra el cuadro de diálogo de Solver
SolverSolve UserFinish:=True
' Para finalizar el procedimiento
SolverFinish KeepFinal:=1
Application. SendKeys "%H"
Application. SendKeys "v"
End Sub
Agradecería si me pudiesen facilitar las modificaciones que debo hacer al código anterior para que no se muestren las pantallas antes mencionadas al ejecutar solver.

1 Respuesta

Respuesta
1
Las 2 últimas líneas reproducen el llamado al menú herramientas (%H) opción Solver (v).
Quitándolas no se abrirá ese menú.
El problema está en que necesito dejar esas dos líneas para poder llamar a solver desde un botón en una hoja de cálculo, lo que quiero es modificar para que desde el botón se lance solver pero no se muestren las pantallas intermedias.
En este mismo foro encontré unas líneas que deberían hacer lo que quiero más cuando las coloco en el código no se produce ningún resultado de solver, coloco las lineas enseguida:
Application.ScreenUpdating = False
Application.SendKeys "%H"
Application.SendKeys "v"
Application.SendKeys "%s", True
Application.SendKeys "{TAB}"
Application.SendKeys "{ENTER}"
Application.ScreenUpdating = True
Quisiera saber cómo puedo solucionar este problema de llamar a solver y que no se muestren las pantallas más que si se muestre el resultado.
Además se presenta un problema adicional, pues tengo dos rutinas en una misma hoja de cálculo, las dos referentes a solver llamadop desde dos botones diferentes, el problema se presenta cuando ejecuto el segundo botón que hace llamado a la segunda rutina pues se cargan las r4estricciones de la primera y segunbda rutina al mismo tiempo, con lo cual quiero saber cómo puedo hacer para hacer llamado a solver desde diferentes botones con diferentes datos en una misma hoja de calaculo y que no se carguen restricciones que no sean las indicadas en el código.
Para que me puedan ayudar adjunto el código para ver si debo cambiar algún nombre a alguna variable o algo parecido.
Sub Dia1()
' Celda objetivo y celdas cambiantes
Solverok setcell:=Range("C10"), maxminval:=1, _
bychange:=Range("AK3:BE3")
' RESTRICCIONES
'Disponibilidad de recursos
SolverAdd CellRef:=Range("X27:X40"), Relation:=1, _
FormulaText:="$Z$27:$Z$40"
' Escasez Cero
SolverAdd CellRef:=Range("X42:X62"), Relation:=3, _
FormulaText:="$Z$42:$Z$62"
' Capacidadd de almacen
SolverAdd CellRef:=Range("X64:X84"), Relation:=1, _
FormulaText:="$Z$64:$Z$84"
' Muestra el cuadro de diálogo de Solver
SolverSolve UserFinish:=True
' Para finalizar el procedimiento
SolverFinish KeepFinal:=1
Application.SendKeys "%H"
Application.SendKeys "v"
End Sub
Sub Dia2()
' Celda objetivo y celdas cambiantes
Solverok setcell:=Range("D10"), maxminval:=1, _
bychange:=Range("AK4:BE4")
' RESTRICCIONES
'Disponibilidad de recursos
SolverAdd CellRef:=Range("X88:X101"), Relation:=1, _
FormulaText:="$Z$88:$Z$101"
' Escasez Cero
SolverAdd CellRef:=Range("X103:X123"), Relation:=3, _
FormulaText:="$Z$103:$Z$123"
' Capacidadd de almacen
SolverAdd CellRef:=Range("X125:X145"), Relation:=1, _
FormulaText:="$Z$125:$Z$145"
' Muestra el cuadro de diálogo de Solver
SolverSolve UserFinish:=True
' Para finalizar el procedimiento
SolverFinish KeepFinal:=1
Application.SendKeys "%H"
Application.SendKeys "v"
End Sub
NParece que no nos estamos entendiendo:
Tu primer consulta:
'...no se me muestre la pantalla "parámetros de solver" ni la de "resultados de solver".
Rta: quitar las 2 últimas líneas. Los parámetros para el solver ya están dados en la rutina por lo que quitando esas 2 líneas no se te muestran las pantallas.
Pero ahora tu consulta es:
'.... necesito dejar esas dos líneas para poder llamar a solver desde un botón en una hoja de cálculo, ...
¿Entonces?
Te explico 1 poco más lo que hace la rutina Dia1 (y Dia2):
1-Se establecen los parámetros (SolverAdd)
2- Se ejecuta Solver  (SolverSolve UserFinish:=True )
Con esta línea es como si presionaras el botón Resolver y con True no se te mostrará la ventana de resultados.
Por eso quito las 2 que siguen porque la vuelven a mostrar.
La rutina Dia2 lo ejecutará nuevamente pero con los nuevos parámetros
Si luego necesitas llamarlo nuevamente utilizá solo esta línea (se calculará con los parámetros últimos)
SolverLoad  loadarea:= "tu rango"
o simplemente con:
SolverSolve UserFinish:=True
Sdos
Elsa
SolverSolve Userfinish:=True

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas