‘ 設定時刻を取得
Sub SetAlarmTime()
Dim inputHour As Variant, inputMinute As Variant, inputSecond As Variant
Dim sheet As Worksheet
Set sheet = ThisWorkbook.Sheets(1)
‘ セルの値を取得
inputHour = sheet.Cells(6, 3).Value
inputMinute = sheet.Cells(6, 4).Value
inputSecond = sheet.Cells(6, 5).Value
‘ 時・分・秒の入力がすべて揃っているか確認
If IsEmpty(inputHour) Or IsEmpty(inputMinute) Or IsEmpty(inputSecond) Then
If Not alarmSet Then ‘ メッセージボックスを一度だけ表示
MsgBox “時・分・秒をすべて入力してください。”, vbExclamation
End If
Exit Sub
End If
‘ 数値以外の場合のエラーチェック
If Not IsNumeric(inputHour) Or Not IsNumeric(inputMinute) Or Not IsNumeric(inputSecond) Then
MsgBox “時・分・秒には数値を入力してください。”, vbExclamation
Exit Sub
End If
‘ 入力を時刻に変換
On Error Resume Next
targetTime = TimeSerial(CInt(inputHour), CInt(inputMinute), CInt(inputSecond))
On Error GoTo 0
‘ 無効な場合のエラーハンドリング
If targetTime = 0 Then
MsgBox “無効な時刻形式です。時・分・秒を正しく入力してください。”, vbExclamation
Exit Sub
End If
‘ targetTime に日付を補完
If targetTime < Time Then
targetTime = Date + 1 + TimeValue(Format(targetTime, "hh:mm:ss")) ' 翌日に設定
Else
targetTime = Date + TimeValue(Format(targetTime, "hh:mm:ss")) ' 当日に設定
End If
alarmSet = True
MsgBox "アラームを " & Format(targetTime, "yyyy/mm/dd hh:mm:ss") & " にセットしました。", vbInformation
End Sub
Sub LogoutPC()
On Error Resume Next
' 現在のタイマーを解除
Dim prevTime As Date
prevTime = Now + TimeValue("00:00:01")
Application.OnTime prevTime, "UpdateClock", , False ' タイマーを解除
' 自動保存とエクセル終了
ThisWorkbook.Save
ThisWorkbook.Saved = True
Application.Quit ' エクセル終了
' Windows ログアウト実行
ExitWindowsEx EWX_LOGOFF, SHTDN_REASON_MAJOR_OTHER
End Sub