ここでは、ユーザーフォームに配置したテキストボックスに対して記述した処理のまとめです。
シート上のセルに対して使いたい時は、お手数ですが状況に合わせて読み替えてください。
1. 前月を取得する
Private Sub UserForm_Activate()
FrmMain.txtDate.SetFocus
'対象年月初期表示(前月)
FrmMain.txtDate.Text = Format(DateAdd("m", -1, Date), "yy/mm")
End Sub
------------------------------
2. 形式を変更する
'「YYMM」の形式であるものを「YY/MM」の形式に変更する
Private Sub txtDate_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(Me.txtDate.Text) = 4 And InStr(Me.txtDate.Text, "/") = 0 Then
Me.txtDate = Left(Me.txtDate.Text, 2) & "/" & Right(Me.txtDate.Text, 2)
End If
End Sub
------------------------------
3. 入力チェック
①未入力
If TRIM(Me.txtDate.Text) = "" Then
IntRes = MsgBox("対象年月を入力して下さい。", vbOKOnly + vbCritical, "入力項目エラー")
Me.txtDate.SetFocus
Exit Sub
End If
②入力形式チェック
※ここでは年、月どちらにも0を含めたいため、2009年9月を「09/09」と入力する想定
If (Len(TRIM(Me.txtDate.Text))) = 5 And
(Mid(TRIM(Me.txtDate.Text), 1, 1) <> "/") And
(Mid(TRIM(Me.txtDate.Text), 2, 1) <> "/") And
(Mid(TRIM(Me.txtDate.Text), 3, 1) = "/") And
(Mid(TRIM(Me.txtDate.Text), 4, 1) <> "/") And
(Mid(TRIM(Me.txtDate.Text), 5, 1) <> "/") Then
'日付の整合性チェック
If DateCheck(TRIM(Me.txtDate.Text)) = False Then
IntRes = MsgBox("対象年月の入力が正しくありません。", vbOKOnly + vbCritical, "入力項目エラー")
Me.txtDate.SetFocus
Exit Sub
Else
p_StrDate = StrConv(Format(TRIM(Me.txtDate.Text) & "/01", "yymm"), vbNarrow)
End If
Else
IntRes = MsgBox("対象年月はYY/MM形式で入力して下さい。", vbOKOnly + vbCritical, "入力項目エラー")
Me.txtDate.SetFocus
Exit Sub
End If