在ACCESS VBA中运行如下代码,会得到运行时错误:对象无效或不再被设置。
Sub CurrentDbFail()
Dim td As TableDef
Set td = CurrentDb.TableDefs("Customers")
MsgBox td.Name '报错'
End Sub
这是由于CurrentDb 函数所返回的对象是临时的,因此td是一个无效的TableDef 对象,在代码中对td的任何后续引用将导致错误。
创建如下例所示的其他对象的代码中执行以下操作:...创建数据库对象变量引用 CurrentDb 函数,而不是直接在 Set 语句中使用 CurrentDb 函数,来创建如下例所示的其他对象的代码中执行以下操作:
启动 Access 并打开示例数据库 Northwind.mdb。
创建一个模块,并键入以下过程:
Sub CurrentDbSuccess()
Dim db As Database
Dim td As TableDef
Set db = CurrentDb()
Set td = db.TableDefs("Customers")
MsgBox td.Name
End Sub
若要测试此过程,在调试窗口中键入下面一行,然后按 ENTER 键:
CurrentDbSuccess
请注意您将收到消息类型的值,该值表示在客户表的名称的客户。
回到顶端
更多信息重现行为的步骤下面的示例将尝试使用 CurrentDb 函数来返回到当前已在 Access 中打开的数据库的指针。因为代码不指派给一个对象变量的该数据库,Cur...重现行为的步骤
下面的示例将尝试使用 CurrentDb 函数来返回到当前已在 Access 中打开的数据库的指针。因为代码不指派给一个对象变量的该数据库,CurrentDb 函数所返回的指针是临时的并设置 TableDef 对象后变为无效。因此,TableDef 对象变量在代码中任何更高版本的引用将导致错误。
启动 Access 并打开示例数据库 Northwind.mdb。
创建一个模块,并键入以下过程:
Sub CurrentDbFail()
Dim td As TableDef
Set td = CurrentDb.TableDefs("Customers")
MsgBox td.Name
End Sub
若要测试此过程,在调试窗口中键入下面一行,然后按 ENTER 键:
CurrentDbFail
请注意您将收到错误"对象无效或不设定"。
联系客服