VBA를 사용하여 Excel의 Solver 참조 셀을 여러 시트에 가질 수 있습니까?


0

이 질문이 다른 포럼에 게시 된 것을 보았지만 여기에 올랐다고 생각하지 않습니다. Solver 매크로에 할당 한 버튼을 Solver의 대상 및 변수와 다른 시트에 배치하고 싶습니다. 모든 대상과 변수는 동일한 시트에 있습니다. 즉, Sheet1의 버튼을 누르면 Solver가 Sheet2의 값을 사용하여 Sheet2에서 실행됩니다.

다른 포럼은 종종 Solver가 활성 시트 이외의 시트에서 셀을 참조 할 수 없다고 주장하지만 VBA 코드를 파고 들기를 기대했습니다. Sheet1에서 Sheet2의 값을 미러링하면 Solver를 잘 사용할 수 있음을 알고 있습니다. 그러나 이것은이 프로그램에 대한 옵션이 아닙니다.

Sheet1의 단추를 Sheet2에 포함 된 Solver 매크로를 호출하려고 시도했지만 매크로는 여전히 Sheet2가 아닌 Sheet1의 셀을 참조했습니다. (이것은 본질적으로 Sheet1의 버튼을 눌러 Sheet2의 버튼을 누르는 것입니다)

그런 다음 아래처럼 셀을 명시 적으로 설명하려고했습니다.

SolverOk SetCell:=ThisWorkbook.Sheets("Sheet2").Cells(12, 2), MaxMinVal:=2, ValueOf:=0, ByChange:=ThisWorkbook.Sheets("Sheet2").Range("$B$9:$B$10"), _
        Engine:=1, EngineDesc:="GRG Nonlinear"

그러나 나는 얻는다 : 런타임 오류 '9'첨자가 범위를 벗어났다.

어떤 도움이나 지시라도 대단히 감사하겠습니다. 저는이 작업에 필요한 VBA를 배우는 고급 사용자가 아닙니다. 시간 내 주셔서 감사합니다.

답변:


1

내가 일반적으로 사용하는 한 가지 해결 방법은 해결하려는 워크 시트를 활성화하고 솔버를 호출 한 다음 버튼이있는 시트를 다시 활성화하는 것입니다. 이런 식으로 뭔가 :

Sub solveForValues()

    ' Prevent Excel from updating the screen while switching sheets
    ' This is purely cosmetic
    Application.ScreenUpdating = False

    Dim wkb As Workbook
    Set wkb = ThisWorkbook

    ' Let's call "solver_sheet" your solver data sheet
    wkb.Worksheets("solver_sheet").Activate

    SolverReset
    SolverAdd CellRef:="$X$83", Relation:=2, FormulaText:="100000"
    SolverOk SetCell:="$X$83", MaxMinVal:=1, ValueOf:=0, ByChange:="$AC$1"
    SolverSolve True

    ' The sheet "button_sheet" contains the button 
    ' and references to the result cells from "solver_sheet" sheet
    wkb.Worksheets("button_sheet").Activate

    ' Turning screen updating back ON
    Application.ScreenUpdating = True

    ' Visual confirmation for the button
    MsgBox ("Done!")

End Sub

1
철저한 답변을 주신 Naucle에게 감사드립니다! 내가 특히 좋아Application.ScreenUpdating = False
CoruscatingRectangle

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.