[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォームに設置された必要項目の確認』(雪やんけ)
ユーザーフォームに複数のテキストボックスやコマンドボタンを設置し、
一覧表に転記するコードを作成しています。
Private Sub CommandButton1_Click()
Dim lastrow As Long
'必須項目の確認
If UserForm2.TextBox1.Value = "" And ComboBox5.Value = "" Then
MsgBox ("氏名および郵便番号が入力されていません") Me.Hide UserForm2.Show
ElseIf UserForm2.TextBox1.Value = "" Then
MsgBox ("氏名が入力されていません") Me.Hide UserForm2.Show
ElseIf UserForm2.ComboBox5.Value = "" Then
MsgBox ("郵便番号が入力されていません") Me.Hide UserForm2.Show
Else
'氏名の同一がないか探す For i = 16 To Cells(Rows.Count, 1).End(xlUp).Row
If UserForm2.TextBox1.Text <> (Range("A" & i).Value) Then MsgBox "同一の氏名があります。確認して下さい。" Me.TextBox1.Value = "" '氏名を消す Me.Hide UserForm2.Show Exit Sub Else '最終行取得して追加 With Worksheets("名簿") lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'A列の再最終行を取得 .Cells(lastrow, 1).Value = TextBox1.Text '氏名 .Cells(lastrow, 2) = ComboBox5.Text '郵便番号
上記コードを実行すると、
同一が無くてもメッセージが表示される、
同一があった場合は、名簿に記載されてしまいます。
どの箇所のコードがおかしいのでしょうか。
何度やってもなかなかうまくいきません…。
ご教授よろしくお願いします。
< 使用 Excel:Office365、使用 OS:unknown >
> If UserForm2.TextBox1.Text <> (Range("A" & i).Value) Then UserForm2.TextBox1.Text と (Range("A" & i).Value)が違ったら、です。 =にしないと。 (tkit) 2022/01/06(木) 13:33
For文の中でIf Elseで分けても最初の16行目で見つからなければ 全て登録されますよ。
参考に Private Sub CommandButton1_Click() Dim lastrow As Long, i As Long, myR As Variant '必須項目の確認 If UserForm2.TextBox1.Value = "" And ComboBox5.Value = "" Then MsgBox ("氏名および郵便番号が入力されていません") ElseIf UserForm2.TextBox1.Value = "" Then MsgBox ("氏名が入力されていません") ElseIf UserForm2.ComboBox5.Value = "" Then MsgBox ("郵便番号が入力されていません") Else With Worksheets("名簿") '氏名の同一がないか探す myR = Application.Match(Me.TextBox1.Text, .Columns(1), 0) If Not IsError(myR) Then MsgBox Me.TextBox1.Text & " は登録済です。", vbExclamation Me.TextBox1.Value = "" '氏名を消す Else '最終行取得して追加 lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'A列の再最終行を取得 .Cells(lastrow, 1).Value = Me.TextBox1.Text '氏名 .Cells(lastrow, 2) = Me.ComboBox5.Text '郵便番号 End If End With End If End Sub
(ピンク) 2022/01/06(木) 14:35
tkit様、コメントありがとうございます。
コードの記述ありがとうございます。
上記のご指摘の通り、名簿欄がえらいこっちゃになってしまい、
Exit Forでループ処理を終了してました。
コードを記述して頂いたので、参考にさせて頂きます!!
ありがとうございました。
(雪やんけ) 2022/01/06(木) 15:13
With Worksheets("名簿") '氏名の同一がないか探す myR = Application.Match(Me.TextBox1.Text, .Columns(1), 0) If Not IsError(myR) Then MsgBox Me.TextBox1.Text & " は登録済です。", vbExclamation
'文字列を全て選択する With UserForm1.TextBox1 .SetFocus .SelStart = 0 .SelLength = Len(TextBox1.Text) End With
上記コードではテキストボックスの値がフォーカスされません。
どこがおかしいのかご教授お願いします。
(雪やんけ) 2022/01/06(木) 15:40
UserForm1とUserForm2があるんですか? このコードはどのUserFormのプロシジャですか?
With UserForm1.TextBox1 ' <= ここはUserForm1でOKですか? .SetFocus .SelStart = 0 .SelLength = Len(TextBox1.Text) ' <= このTextBox1はどのUserFormにありますか? End With (とおりすがり) 2022/01/06(木) 15:48
UserForm1でOKです。
TextBox1はUserForm1にあります。
UserForm1にあるTextBox1に入力された氏名が既に登録されていたら
MsgBox Me.TextBox1.Text & " は登録済です。"
とメッセージを表示させ、
TextBox1の文字列を選択させ分かり易く修正させようとしています。
(雪やんけ) 2022/01/06(木) 16:01
>このコードはどのUserFormのプロシジャですか? これに対する回答は?
.SelLength = Len(TextBox1.Text) ↑ このTextBoxの親の指定がないんです
With でくくってあるので、 .SelLength = Len(.Text)
としたらいいんじゃないでしょうか (とおりすがり) 2022/01/06(木) 16:09
無事完成しました!!!!!
ありがとうございます。
(雪やんけ) 2022/01/07(金) 11:15
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.