2014-09-01 24 views
0

任何人都可以解釋這個代碼有什麼問題嗎?有一個運行時錯誤,指出對象不支持此屬性或方法VBA記錄集 - 對象不支持此屬性或方法

Set rst = DataFunctions.CheckCompanyID 

If IsNull(rst.Fields("ID")) Then 'Error occurs here 
    ContactID = 0 
Else 
    ContactID = rst!ID 
End If 

CheckCompanyID方法不如下

CompanyValue = GetCurrentRecord 

CheckData = "Select CompanyID, ID From Contacts Where Contacts.CompanyID = " & CompanyID & ";" 

CheckCompanyID = CurrentDB.OpenRecordset(CheckData, dbOpenDynaset) 'Returns The Recordset 

If Is Null(rat.Fields("*FieldName*")) Then已經在其他地方使用和工程確定。我想這個錯誤是返回記錄集對象的結果嗎?

+0

你在方法'CheckCompanyID'中使用'一個錯誤恢復下一個'? – 2014-09-01 14:23:20

+2

最有可能的情況:'DataFunctions.CheckCompanyID'返回'Nothing',你不檢查。 – Tomalak 2014-09-01 14:28:58

+1

您正在分配'CheckCompanyID'而不使用'Set'。 – MP24 2014-09-01 14:36:03

回答

1

一個在my question comment懷疑,你的函數DataFunctions.CheckCompanyID不返回記錄集對象,但Nothing代替。 Nothing是VB的null

如果函數內部存在未處理的錯誤並且On Error Resume Next生效,或者僅僅是因爲該函數是以這種方式實現的,則會發生這種情況。

作爲一般提示:您不應該使用對象引用而不檢查它們是否有效(即不是Nothing)以避免像這樣的運行時錯誤。

您可以檢查Nothing容易:

Set rst = DataFunctions.CheckCompanyID 

ContactID = 0 

If Not rst Is Nothing 
    If IsNull(rst.Fields("ID")) Then 
     ContactID = rst!ID 
    End If 
End If 

注:經典VB不支持短路邏輯表達式,所以你不能使用一個線形態其他語言將允許:

If Not rst Is Nothing And Not IsNull(rst.Fields("ID")) Then 
    ' This will cause an error because rst.Fields("ID") is always evaluated! 
End If 
0

檢查你的第一個,如果它得到一個結果返回的記錄集。 和嘗試這個辦法:

IF nz(rst("ID"), "") = "" then 

代替

If IsNull(rst.Fields("ID")) Then 
相關問題