[[20220106132036]] 『ユーザーフォームに設置された必要項目の確認』(雪やんけ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォームに設置された必要項目の確認』(雪やんけ)

ユーザーフォームに複数のテキストボックスやコマンドボタンを設置し、
一覧表に転記するコードを作成しています。

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様、コメントありがとうございます。
初歩的なミスを見落としてました…
ありがとうございます。

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.