2017-05-05 19 views
1

私はオブジェクト変数または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

そのポイントは、ユーザーフォームを介してデータを追加する際に予約番号がすでに存在する場合、

  1. を見て、それが存在しない場合は
  2. 、ユーザーフォームを初期化し、ユーザーに伝える、追加することですデータと確認の入力。

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 
+0

どの行にエラーがありますか? –

+0

'r = BookingNumberTextBox.Text Then' – Panacea06

+0

'debug.print BookingNumberTextBox.Text'は何を出力しますか? –

答えて

4

〜:

'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 
     MsgBox "Booking Number already exists." 
     Call UserForm_Initialize 
    End If 
End With 
+0

ありがとうYowE3K、あなたのコードで遊んで少し、私は私が私のオリジナルのポストを更新した私が望んだものを得た! – Panacea06

+0

@ Panacea06 - それはあなたの後ろのものかどうか疑問に思っていましたが、「お問い合わせが追加されました」とは何も処理されていないことを意味しませんでした。 (しかし、それは単純にあなたが私たちが常に質問に好きなMCVEを提供したことによるものかもしれません:) – YowE3K

+0

@ Panacea06 - 「If」内の単純化を示す答えを更新しました。 'r'は' BookingNumberTextBox.Text'と等しく、 'r'は**が** **の値を持つセルに設定されているため、等しくなければなりません。 – YowE3K

関連する問題