【问题标题】:Access VBA object types访问 VBA 对象类型
【发布时间】:2014-01-07 00:45:15
【问题描述】:

我正在尝试在我的 Access 项目中构建一个过程,该过程将接受表格或表单作为参数的一部分。如果对象是一个表格,那么它应该检查表格的字段;如果它是一个表单,那么它应该是表单的控件。

我尝试使用变体或对象变量类型作为参数。但是无论哪种方式,当我检查 VarType() 时,传递的变量都是对象类型,所以我无法区分它们。 (顺便说一下,我目前正在将表格作为 TableDef 对象传递。)

我会尝试根据参数类型重载函数,但显然这在 VBA 中不可用(据我所知,Function Overloading and UDF in Excel VBA。有什么建议吗?

【问题讨论】:

  • “作为参数的一部分的表格或表格” 如何将表格传递给您的过程?作为表名的字符串?作为TableDef 或记录集对象?
  • 改用TypeName()
  • 您可以在 MSysObjects 中查找它并使用 If/Then 语句运行正确的过程。表单的 MSysObjects.Type=-32768,表格的 MSysObjects.Type=1、4 或 6(取决于它们是本地的还是链接的)。

标签: vba ms-access


【解决方案1】:

要在 VBA 中测试某个类,请结合使用 TypeOfIs 运算符:

Sub WishVBAHadOverloads(ByVal Obj As Object)
  If TypeOf Obj Is TableDef Then 
    Dim Def As TableDef
    Set Def = Obj
    ' work with Def... 
    Exit Sub
  End If
  If TypeOf Obj Is Form Then 
    Dim Frm As Form
    Set Frm = Obj
    ' work with Frm... 
    Exit Sub
  End If
  Err.Raise 999, "WishVBAHadOverloads", "Bad argument type - expected a TableDef or Form"
End Sub

【讨论】:

  • TypeOf ... 似乎确实有效。有用又聪明——“WishVBAHadOverloads”! 8^)
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多