¿Cómo ejecutar Solver correctamente desde este código vba?
publicado
Estoy tratando de hacer un código el cual use Solver para obtener una cantidad dentro de un filtro, de una pequeña base de datos.
La columna "G" tiene los numero 1 (para configurarlo como binario después)
La columna "D" tienelas cantidades que quiero que Solver revise para que me de una cantidad designada en la columna "i".
El error que me arroja es"Error en el modelo. Compruebe que todas las celdas y restricciones son validas" Es posible que algunas celdas de variables estén marcadas como Integer, Binary o AllDiferent
Sub busquedadecantidad()
Dim cantidad, binario As Range
Dim hoja As Worksheet
Dim i As Integer
Dim datobuscado As Long ' "filtrado y seleccionado de datos"
For i = 2 To 4
Sheets("valor del inventario").Select
criterio = Range("H" & i)
ultimocampo = Range("A1").End(xlDown).Row
campototal = "A1:G" & ultimocampo
'Asegurarse de que la base de datos esté limpia y que quede hasta la columna F
Columns("A:G").Select
Selection.AutoFilter
ActiveSheet.Range(campototal).AutoFilter Field:=2, Criteria1:=criterio 'Correcto
Estoy tratando de hacer un código el cual use Solver para obtener una cantidad dentro de un filtro, de una pequeña base de datos.
La columna "G" tiene los numero 1 (para configurarlo como binario después)
La columna "D" tiene las cantidades que quiero que Solver revise para que me de una cantidad designada en la columna "i".
El error que me arroja es "Error en el modelo. Compruebe que todas las celdas y restricciones son validas" Es posible que algunas celdas de variables estén marcadas como Integer, Binary o AllDiferent
Sub busquedadecantidad()
Dim cantidad, binario As Range
Dim hoja As Worksheet
Dim i As Integer
Dim datobuscado As Long
' "filtrado y seleccionado de datos"
For i = 2 To 4
Sheets("valor del inventario").Select
criterio = Range("H" & i)
ultimocampo = Range("A1").End(xlDown).Row
campototal = "A1:G" & ultimocampo
'Asegurarse de que la base de datos esté limpia y que quede hasta la columna F
Columns("A:G").Select
Selection.AutoFilter
ActiveSheet.Range(campototal).AutoFilter Field:=2, Criteria1:=criterio
'Correcto
' "Selección y establecimiento de rangos"
cantidadabajo = Range("D1").End(xlDown).Row
cantidadarriba = Range("D1").Offset(1, 0).Row
binarioabajo = Range("G1").End(xlDown).Row
binarioarriba = Range("G1").Offset(1, 0).Row
producto = Application.WorksheetFunction.SumProduct(Range("D" & cantidadabajo & ":D" & cantidadarriba).SpecialCells(xlCellTypeVisible), Range("G" & binarioabajo & ":G" & binarioarriba).SpecialCells(xlCellTypeVisible))
' "Introduccion de formula"
Range("B21540").Select
Selection = producto
Set hoja = ThisWorkbook.Sheets("valor del inventario")
Set binario = hoja.Range("G" & cantidadabajo & ":G" & cantidadarriba).SpecialCells(xlCellTypeVisible)
datobuscado = Range("I" & i).Value
' "Aplicacion de Solver"
SolverReset
SolverOk SetCell:="$B$21540", MaxMinVal:=3, ValueOf:=datobuscado, ByChange:="binario", Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="binario", Relation:=5, FormulaText:="binario"
SolverSolve
Next i
End Sub
Espero me puedan ayudar, muchas gracias
Usodesolver(publico).xlsmFetching info...