2017-05-05 74 views
1

我收到對象變量或帶塊變量未設置 - 用戶窗體數據驗證

運行時錯誤「91」:對象變量或帶塊變量未在這個特別的設置

代碼位,我不能工作了什麼是錯的吧...

'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. ,如果它不存在,添加數據並確認輸入。

編輯:基於YowE3K的回答,我修改了他的代碼,並提出以下;

'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 
     '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 
     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

相關問題