私はオブジェクト変数またはWithブロック変数が設定されていません - ユーザーフォームデータの検証
実行時エラー「91」を取得しています:オブジェクト変数またはWithブロック変数は、この特定の上
を設定していませんコードのビットは、私はライン上のエラーを取得しています
'Booking Number Validation
With Sheets("New Enquiries")
Dim r As Excel.Range
Set r = .Range("A:A").Find(What:=BookingNumberTextBox.Text, LookAt:=xlWhole, MatchCase:=False)
If r = BookingNumberTextBox.Text Then
MsgBox ("Booking Number already exists.")
Call UserForm_Initialize
Else
MsgBox ("Enquiry has been added.")
End If
End With
...それと間違っているものをうまくすることはできませんIf r = BookingNumberTextBox.Text Then
そのポイントは、ユーザーフォームを介してデータを追加する際に予約番号がすでに存在する場合、
- を見て、それが存在しない場合は
- 、ユーザーフォームを初期化し、ユーザーに伝える、追加することですデータと確認の入力。
EDIT:YowE3Kの回答に基づいて、コードを修正して次のことを思いつきました。 OPの改訂コードに基づいて
'Booking Number Validation
With Sheets("New Enquiries")
Dim r As Excel.Range
Set r = .Range("A:A").Find(What:=BookingNumberTextBox.Text, LookAt:=xlWhole, MatchCase:=False)
If r Is Nothing Then
'Find was not successful - do whatever you want in that situation
'...
'...
Else
'Find was successful
If r.Value = BookingNumberTextBox.Text Then
MsgBox "Booking Number already exists."
Call UserForm_Initialize
Else
'You shouldn't ever reach this spot because you were searching
'for BookingNumberTextBox.Text, so r.Value should be equal to it
MsgBox "Enquiry has been added."
End If
End If
End With
が、最終的な解決策を簡略化することができます:あなたは範囲を使用しようとする前に、値が既に存在するかどうかをチェックされていない
'Booking Number Validation
With Sheets("New Enquiries")
Dim r As Excel.Range
Set r = .Range("A:A").Find(What:=BookingNumberTextBox.Text, LookAt:=xlWhole, MatchCase:=False)
If r Is Nothing Then
MsgBox "Enquiry has been added."
Else
If r.Value = BookingNumberTextBox.Text Then
MsgBox "Booking Number already exists."
Call UserForm_Initialize
End If
End If
End With
どの行にエラーがありますか? –
'r = BookingNumberTextBox.Text Then' – Panacea06
'debug.print BookingNumberTextBox.Text'は何を出力しますか? –