2015-05-02 131 views
2

在excel vba中出現錯誤:對象變量或塊變量未設置(錯誤91)。對象變量或在excel中未設置塊變量(錯誤91)

Sub RegisterNewUser() 

'Disable screen refresh during code excution 
Application.ScreenUpdating = False 


'Variables 
Dim users As Worksheet   'Variable for users table sheet 
Dim NewUser As Worksheet   'Variable for new user entry sheet 
Dim RecordIsValid As String 
Dim NextRecordIndex As Long  'Variable for the next available row in the users table 

Set users = ThisWorkbook.Worksheets("USERS") 
Set NewUser = ThisWorkbook.Worksheets("NEW USER") 
NextRecordIndex = users.ListObjects("USERS").ListRows.Count 

If NextRecordIndex = 0 Then 

users.ListObjects("USERS").DataBodyRange(NextRecordIndex, 1).Value = NewUser.Range("D" & 6).Value 

Else 

NextRecordIndex = NextRecordIndex + 1 

users.ListObjects("USERS").DataBodyRange(NextRecordIndex, 1).Value = NewUser.Range("D" & 6).Value 

    End If 

錯誤正是這裏:

after the if statement: 

users.ListObjects( 「用戶」)DataBodyRange(NextRecordIndex,1)。價值= NewUser.Range( 「d」 & 6)。價值

else條件中的代碼工作正常。它只在USERS表爲空且行數爲零時纔會出現此錯誤。

任何人都可以請指導是什麼問題?

謝謝..

+0

因此,在USERS工作表上,您有一張名爲USERS的表? – Jeeped

+0

檢查ThisWorkbook.Worksheets(「新用戶」)的計算結果爲Nothing –

+0

是的,在USERS工作表下有一個USERS表。 –

回答

1

如果數量或記錄爲0,則不能引用:

users.ListObjects("USERS").DataBodyRange

因爲它不存在(DataBodyRange = Nothing

您應該添加先排空排:

users.ListObjects("USERS").ListRows.Add

你也應該更換:

users.ListObjects("USERS").DataBodyRange(NextRecordIndex, 1).Value 

users.ListObjects("USERS").DataBodyRange(NextRecordIndex+1, 1).Value 

編輯:

if聲明可能是多餘的,下面的代碼應該在任何情況下工作:

NextRecordIndex = users.ListObjects("USERS").ListRows.Count 

users.ListObjects("USERS").ListRows.Add 
users.ListObjects("USERS").DataBodyRange(NextRecordIndex + 1, 1).Value = 
     NewUser.Range("D" & 6).Value 
+0

不錯的提示。錯誤消失了,但記錄已插入到標題行中。 當表格爲空時,有什麼方法可以在第一個表格行中插入? –

+0

@SupermanAkrt請看看答案的第二部分(編輯)。只需將'1'添加到'NextRecordIndex'。 – BrakNicku

+0

好,現在工作,但我有一個問題: 當我用戶:users.ListObjects(「USERS」).DataBodyRange(1,1)。值 它添加在第二個DataBodyRange行。 –

相關問題