質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1406閲覧

特定のテキストボックスを空にする

milk1218

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/10/27 05:28

前提・実現したいこと

現状、テキストボックスの背景が灰色になっているところは
入力不可になっています。(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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

例えば、曜日ラベルが空欄なら、セルをクリアするとか。

vba

1 For i = 1 To 31 2 If Me.Controls("lblWeek" & i).Caption = "" Then 3 ws.Cells(i + 1, 3).resize(,4).ClearContents 4 ws.Cells(i + 1, 8).ClearContents 5 Else 6 ws.Cells(i + 1, 3).Value = monthly(i).starttime 7 ws.Cells(i + 1, 4).Value = monthly(i).endtime 8 ws.Cells(i + 1, 5).Value = monthly(i).breakstart 9 ws.Cells(i + 1, 6).Value = monthly(i).breakend 10 ws.Cells(i + 1, 8).Value = monthly(i).note 11 Me.Controls("txtWorktime" & i).Value = Format(monthly(i).worktime, "hh:mm") 12 End If 13 Next

投稿2021/10/27 05:47

hatena19

総合スコア33790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

milk1218

2021/10/28 03:44

テキストボックスを空にするのではなく、セルのクリアの方がスムーズでしたね・・! ありがとうございます!解決致しました!キャプションが空のところには入らなくなりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問