前提・実現したいこと
Youtube等でVBAを学び始めて2週間程度の初心者です。
UserFormに記載した内容をエクセルシートの最終行に転記したいです。
・テキストボックスにグレー表記で記載例を表示
・テキストボックスに触ったら何も記載がない状態で入力できる
・いくつか必須の入力項目がある
・いくつかコンボボックスから選択する項目がある
・コマンドボタンをクリックした時点で転記されるようにしたい
発生している問題・エラーメッセージ
UserFormに記載した後、コマンドボタンを押した時に以下の事象が発生します
・転記されない
・UserFormが自動的に閉じる
・もう一度UserFormを呼び出すと記載した内容が消えている
・転記されることもある(3回に1回程度)
該当のソースコード
######標準モジュールに記載したコード
Module1
1※こちらは標準モジュールに記載しました。 2 Sub 入力フォーム呼出() 3 UserForm1.Show vbModalless 4 End Sub
######UserForm1に記載したコード
Private Sub UserForm_Initialize() 種別.AddItem "出張" '種別 = コンボボックスのオブジェクト名 種別.AddItem "休暇" 種別.AddItem "その他" Dim 最終行, 一覧 '変数設定「最終行」「一覧」 最終行 = Worksheets("カレンダー").Cells(Rows.Count, 13).End(xlUp).Row For 一覧 = 12 To 最終行 担当者.AddItem Worksheets("カレンダー").Cells(一覧, 13) '担当者 = コンボボックスのオブジェクト名 Next 一覧 End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 対象日_Enter() '対象日=テキストボックスのオブジェクト名 With 対象日 If .Value = "例) 10/10 or 2022/10/10" Then .Value = "" .ForeColor = vbBlack .Font.Size = 14 End If End With End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 対象日_Exit(ByVal Cancel As MSForms.ReturnBoolean) With 対象日 If .Value = "" Then .Value = "例) 10/10 or 2022/10/10" .ForeColor = rgbGray .Font.Size = 12 対象日必須.Caption = "対象日は必須入力です" '対象日必須 = ラベルのオブジェクト名 End If End With End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 種別_Enter() With 種別 If .Value = "右の▼から選択" Then .Value = "" .ForeColor = vbBlack .Font.Size = 14 End If End With End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 種別_Exit(ByVal Cancel As MSForms.ReturnBoolean) With 種別 If .Value = "" Then .Value = "右の▼から選択" .ForeColor = rgbGray .Font.Size = 12 種別必須.Caption = "種別は必須入力です" '種別必須 = ラベルのオブジェクト名 End If End With End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 担当者_Enter() With 担当者 If .Value = "右の▼から選択" Then .Value = "" .ForeColor = vbBlack .Font.Size = 14 End If End With End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 担当者_Exit(ByVal Cancel As MSForms.ReturnBoolean) With 担当者 If .Value = "" Then .Value = "右の▼から選択" .ForeColor = rgbGray .Font.Size = 12 担当者必須.Caption = "担当者は必須入力です" End If End With End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 備考_Enter() '備考=テキストボックスのオブジェクト名 With 備考 If .Value = "例) ※担当者名を書く時は必ずひらがなで記載!!" Then .Value = "" .ForeColor = vbBlack .Font.Size = 14 End If End With End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 備考_Exit(ByVal Cancel As MSForms.ReturnBoolean) With 備考 If .Value = "" Then .Value = "例) ※担当者名を書く時は必ずひらがなで記載!!" .ForeColor = rgbGray .Font.Size = 12 End If End With End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 登録_Click() '登録=コマンドボタンのオブジェクト名 ActiveSheet.Protect UserInterfaceOnly:=True If 対象日.Value = "例) 10/10 or 2022/10/10" Then MsgBox "対象日は必須入力です" Exit Sub End If If 種別.Value = "右の▼から選択" Then MsgBox "種別は必須入力です" Exit Sub End If If 担当者.Value = "右の▼から選択" Then MsgBox "担当者は必須入力です" Exit Sub End If Worksheets("入力シート").Range("B3").End(xlDown).Offset(1, 0).Select ActiveCell.Value = 対象日.Value 対象日.Value = "例) 10/10 or 2022/10/10" 対象日.ForeColor = rgbGray 対象日.Font.Size = 12 ActiveCell.Offset(0, 16).Value = 種別.Value ActiveCell.Offset(0, 18).Value = 担当者.Value If 備考 <> "例) ※担当者名を書く時は必ずひらがなで記載!!" Then ActiveCell.Offset(0, 19).Value = 備考.Value End If MsgBox "新規登録しました" End Sub ----------------------------------------------------------------------------------------------------------------------- Private Sub 閉じる_Click() '閉じる=コマンドボタンのオブジェクト名 ActiveSheet.Protect UserInterfaceOnly:=True Unload UserForm1 End Sub
試したこと
コードを記載する順番が関係あるのかな?と調べましたが全然わかりませんでした。
デバックモードにも移行しないので、コード自体に間違いはない気がしているのですが…。
補足情報(FW/ツールのバージョンなど)
office365を利用しています。
回答1件
あなたの回答
tips
プレビュー