作成したシフト表を、手動で調整するための仕組みを考えます。
入力フォームの表示と解除
以下の項目を実現するために、少々の工夫をします。
・対象内のセルをダブルクリックされたら入力フォームを開き、セル値をリストに反映。
・対象外のセルを選択されたら入力フォームを閉じる。
・対象内で別のセルを選択した場合は、その内容を入力フォームに反映させる。
以下、コード
Public Sub SheetProtect() 'シート保護 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True End Sub Public Sub SheetUnprotect() '保護解除 ActiveSheet.Unprotect End Sub
ソルバー処理開始前と後に、SheetUnprotect , SheetProtect を呼び出す。(下記の太字/斜体部)
Private Sub cmd日数調整条件_Click()、Private Sub cmd日数調整条件_Click()、Public Sub
cmdGo_Click() も同様
Private Sub cmd確保条件_Click() With ActiveSheet Call SheetUnprotect 'シート保護解除 .Range("MSG") = "" .条件設定_確保 SolverOptions , , , , , , , , , , , , , , , , , , , , TIME_NO_IMP_MAX SolverOkDialog SetCell:="目標_過不足", MaxMinVal:=2, ValueOf:=0, ByChange:="変化させるセル", Engine:=3, EngineDesc:="Evolutionary" If .Range("目標_過不足") = 0 Then .Range("MSG") = "確保成功" .cmd勤務色更新_Click Call SheetProtect 'シート保護 End With End Sub手動での保護解除