スケジュール管理表を作成 ⑨ 実行中の作業を中断

先日から、スケジュール管理表をExcelで作成している。
infoment.hatenablog.com
今日も、前回の続きから。

f:id:Infoment:20210125220333p:plain

例えば、こんな予定を立てていたとする。
f:id:Infoment:20210125222551p:plain

ところが「●●ユニット」を構想し始めて30分経った頃、上司からの指示で
打ち合わせを行うことになった。この時、スケジュールとしては、

① 一旦、●●ユニットの構想を終了。終了時刻は9:30。
f:id:Infoment:20210125223149p:plain

② 今から行う打ち合わせを追加。
f:id:Infoment:20210125223247p:plain

③ 打ち合わせ後に再開予定の構想を追加。
f:id:Infoment:20210125223414p:plain

この作業が地味に面倒くさいので、「中断」ボタンを設けることにした。
ついでに、残り時間などの再計算を行うための「更新」ボタンも追加した。
f:id:Infoment:20210125223525p:plain

コマンドボタンのオブジェクト名

  • 中断ボタン cb中断
  • 更新ボタン cb更新

↓ シートモジュールに記載。

Private Sub cb更新_Click()
    Call UpdateTable
End Sub

Private Sub cb中断_Click()
    Call SetInterruption
End Sub

↓ 標準モジュールに記載。

Sub SetInterruption()
    Dim Tb As ListObject
    Set Tb = ActiveSheet.ListObjects(1)
    
    ' 現在作業中案件の終了時刻セル。
    Dim PresentRange As Range
    Set PresentRange = Tb.ListRows(Tb.ListRows.Count).Range(列名.en終了時刻).End(xlUp).Offset(1)
    
    ' 現在作業中案件のテーブル行番号。
    Dim RowIndex As Long
        RowIndex = PresentRange.row - Tb.Range(1).row
    
    ' 中断後に行う作業と、中断作業を再開するための行を一つずつ追加。
        Tb.ListRows.Add RowIndex + 1
        Tb.ListRows.Add RowIndex + 1
    
    ' 中断作業再開の項目は、現在進行中の項目から移植する。
        Tb.ListRows(RowIndex + 2).Range(2).Resize(, 2).Value = Tb.ListRows(RowIndex).Range(2).Resize(, 2).Value
    
    ' 中断する作業は、中断ボタンを押した時点で一旦終わったこととする。
    ' 入力される時間がことなる場合(事後で中断ボタンを押す場合など)は、終了時刻を手入力で修正する。
        PresentRange = wf.MRound(Time, "0:15")
    
    ' 中断後に行う実施内容をそのまま入力できるよう、該当セルを選択。
        Tb.ListRows(RowIndex + 1).Range(2).Select
End Sub

さてそれでは、部長と打ち合わせのため席を立つところを再現してみよう。
f:id:Infoment:20210125224158g:plain

この操作を録画した時刻が23時前であるため、中断した時刻が9:30ではなくなって
いるが、意図したことは伝わっただろうか。

ということで、本日はここまで。
次回は、総まとめを行います。

参考まで。