[ ユーザーフォーム_目次 ]
更新用フォーム
更新用フォームは、選択された会員データの項目を表示し、変更された入力内容でワークシートの同データを更新します。
[ 目次 ]
- 画面を再確認
- 初期処理
- 更新ボタン クリック時
- キャンセルボタン クリック時
画面を再確認
初期処理
使用する各コンボボックスの値を設定しています。設定は
標準モジュールで行います。
選択された会員データの項目を、ラベルやテキストボックスにセットします。
Private Sub UserForm_Initialize()
SetComboBox (Me)
With FormSearch.ListMembers
LabelID.Caption = .List(.ListIndex, 0)
BoxName.Value = .List(.ListIndex, 1)
BoxSex.Value = .List(.ListIndex, 2)
BoxYear.Value = Year(.List(.ListIndex, 3))
BoxMonth.Value = Month(.List(.ListIndex, 3))
BoxDay.Value = Day(.List(.ListIndex, 3))
End With
End Sub
− Memo −
-
標準モジュールの SetComboBox には、引数としてフォーム自体を渡します。
更新ボタン クリック時
未入力チェックを行い、チェックを通過したら、ワークシートの該当データの値を更新します。
Private Sub ButtonMod_Click()
'入力チェック
If InputIsInvalid Then
Exit Sub
End If
'更新の確認
If MsgBox(LabelID.Caption & vbCrLf & BoxName.Value & vbCrLf & "この会員情報を更新しますか?" _
, vbExclamation + vbOKCancel, "確認") = vbOK Then
'更新処理
If MemberIsModified(LabelID.Caption) Then
MsgBox LabelID.Caption & vbCrLf & BoxName.Value & vbCrLf & "この会員情報を更新しました。" _
, vbInformation + vbOKOnly, "確認"
'検索画面のリストボックスを更新
FilterMembers
FormSearch.UpdateListMembers
'更新中止の場合
Else
MsgBox LabelID.Caption & vbCrLf & BoxName.Value & vbCrLf & "この会員更新を中止しました。" _
, vbCritical + vbOKOnly, "確認"
End If
Else
MsgBox "キャンセルしました。", vbInformation + vbOKOnly, "確認"
End If
Unload Me
End Sub
----------------------------------------------------------------------
Private Function InputIsInvalid() As Boolean
'名前チェック
If BoxName.Text = "" Then
MsgBox "名前を入力してください", vbExclamation, "名前 入力エラー"
InputIsInvalid = True
Exit Function
End If
'性別チェック
If BoxSex.Text = "" Then
MsgBox "性別を選択してください", vbExclamation, "性別 選択エラー"
InputIsInvalid = True
Exit Function
End If
'生年月日チェック
DateOfBirth = BoxYear.Text & "/" & BoxMonth.Text & "/" & BoxDay.Text
If Not (IsDate(DateOfBirth)) Then
MsgBox "生年月日を確認してください", vbExclamation, "生年月日エラー"
InputIsInvalid = True
Exit Function
End If
InputIsInvalid = False
End Function
----------------------------------------------------------------------
Private Function MemberIsModified(ByVal inputID As String) As Boolean
'会員情報更新処理
Worksheets("Sheet1").Select
Dim lastRow As Integer
lastRow = Range("A1048576").End(xlUp).Row
Dim i As Integer
i = 2
Do While i <= lastRow
If Cells(i, 1).Value = inputID Then
Cells(i, 2).Value = BoxName.Value
Cells(i, 3).Value = BoxSex.Value
Cells(i, 4).Value = DateOfBirth
MemberIsModified = True
Exit Function
End If
i = i + 1
Loop
MemberIsModified = False
End Function
− Memo −
-
すべてを1プロシージャに記述すると長いので、入力チェックとワークシート更新を別プロシージャにしました。
-
ワークシート更新の戻り値をブーリアンにしているのは、何かしら不具合が生じた場合への、念のための備えです。
-
生年月日については、日付妥当性チェックをしています。(2月31日も選択できるような緩い仕様のため)
-
更新後、更新完了のメッセージボックスを出して、フォームを閉じます。
-
フォームを閉じたとき、検索用フォームのリストボックスの値が変更前のままだと違和感がありました。
なので、同じ条件で再検索をして、リストボックスの値を再設定しています。
キャンセルボタン クリック時
更新用フォームを閉じます。
Private Sub ButtonCancel_Click()
Unload Me
End Sub