前提・実現したいこと
現状、テキストボックスの背景が灰色になっているところは
入力不可になっています。(2月や11月のように、最終日が31日ではない月の時です)
ユーザーフォームのテキストボックスは、デフォルトで「00:00」が入っているのですが、更新を押すと
画像のように、入力不可のテキストボックスに該当する日付のシートのセルに12:00:00 AMと入ってしまいます。
これを更新押しても入らないように、或いは灰色の部分は「00:00」が入らないようにしたいです。
下記を試してみたのですが、12:00:00 AMと入ってしまいます。
この場合使用するのはValueでは無いのでしょうか.....?
或いはそれぞれの時間表記テキストボックスで24時間制の正規表現を指定しているからでしょうか.....?
ご教授いただければ幸いです。
Dim intDay As Integer '日付用の変数
For intDay = 1 To 31
If Me.Controls("lblWeek" & Format(intDay)).Caption = "" Then '曜日キャプションが空の時
Me.Controls("txtStarttime" & Format(intDay)).Enabled = False
Me.Controls("txtEndtime" & Format(intDay)).Value = ""
Me.Controls("txtBreakstart" & Format(intDay)).Value = ""
Me.Controls("txtBreakend" & Format(intDay)).Value = ""
Me.Controls("txtWorktime" & Format(intDay)).Value = ""
Me.Controls("txtNote" & Format(intDay)).Value = ""
End If
Next
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
Private Sub cmbMonth_Change() '月プルダウン On Error Resume Next Debug.Print cmbMonth.Value Worksheets(Format(cmbYear.Value, "0000") & Format(cmbMonth.Value, "00")).Select '先に月シートを選択してから '曜日設定やテキストへの転記をする SetWeekLabel '曜日設定 Call AttendanceSave '選択したシートデータを構造体配列へ Call SetAttendance '構造体配列からテキストへ 'SetData End Sub Private Sub CommandButton1_Click() '更新 Set ws = ThisWorkbook.Worksheets(Format(cmbYear.Value, "0000") & Format(cmbMonth.Value, "00")) Dim intDay As Integer '日付用の変数 For intDay = 1 To 31 If Me.Controls("lblWeek" & Format(intDay)).Caption = "" Then Me.Controls("txtStarttime" & Format(intDay)).Enabled = False Me.Controls("txtEndtime" & Format(intDay)).Value = "" Me.Controls("txtBreakstart" & Format(intDay)).Value = "" Me.Controls("txtBreakend" & Format(intDay)).Value = "" Me.Controls("txtWorktime" & Format(intDay)).Value = "" Me.Controls("txtNote" & Format(intDay)).Value = "" End If Next Dim i For i = 1 To 31 If IsDate(Me.Controls("txtStartTime" & i).Value) Then monthly(i).starttime = Format(Me.Controls("txtStartTime" & i).Value, "hh:mm") End If If IsDate(Me.Controls("txtEndTime" & i).Value) Then monthly(i).endtime = Format(Me.Controls("txtEndTime" & i).Value, "hh:mm") End If If IsDate(Me.Controls("txtBreakstart" & i).Value) Then monthly(i).breakstart = Format(Me.Controls("txtBreakstart" & i).Value, "hh:mm") End If If IsDate(Me.Controls("txtBreakend" & i).Value) Then monthly(i).breakend = Format(Me.Controls("txtBreakend" & i).Value, "hh:mm") End If monthly(i).note = Me.Controls("txtNote" & i).Value Next For i = 1 To 31 ws.Cells(i + 1, 3).Value = monthly(i).starttime ws.Cells(i + 1, 4).Value = monthly(i).endtime ws.Cells(i + 1, 5).Value = monthly(i).breakstart ws.Cells(i + 1, 6).Value = monthly(i).breakend ws.Cells(i + 1, 8).Value = monthly(i).note Me.Controls("txtWorktime" & i).Value = Format(monthly(i).worktime, "hh:mm") Next Private Sub SetWeekLabel() Dim intDay As Integer '日付用の変数 For intDay = 1 To 31 If IsDate(cmbYear.Text & "/" & cmbMonth.Text & "/" & Format(intDay)) Then Me.Controls("lblWeek" & Format(intDay)).Caption = _ Format(CDate(cmbYear.Text & "/" & cmbMonth.Text & "/" & Format(intDay)), "aaa") '日付型 (Date) に変換 Me.Controls("txtStarttime" & Format(intDay)).Enabled = True Me.Controls("txtEndtime" & Format(intDay)).Enabled = True Me.Controls("txtStarttime" & Format(intDay)).BackColor = &HFFFFFF '以下略 Else Me.Controls("lblWeek" & Format(intDay)).Caption = "" Me.Controls("txtStarttime" & Format(intDay)).Enabled = False Me.Controls("txtStarttime" & Format(intDay)).BackColor = &HC0C0C0 '以下略 End If Select Case Me.Controls("lblWeek" & Format(intDay)).Caption Case "土" Me.Controls("lblWeek" & Format(intDay)).ForeColor = vbBlue Case "日" Me.Controls("lblWeek" & Format(intDay)).ForeColor = vbRed Case Else Me.Controls("lblWeek" & Format(intDay)).ForeColor = vbBlack End Select Next End Sub
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/28 03:44