作成したシフト表を、手動で調整するための仕組みを考えます。



入力フォームの表示と解除
以下の項目を実現するために、少々の工夫をします。
・対象内のセルをダブルクリックされたら入力フォームを開き、セル値をリストに反映。
・対象外のセルを選択されたら入力フォームを閉じる。
・対象内で別のセルを選択した場合は、その内容を入力フォームに反映させる。
以下、コード
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
手動での保護解除