我正在使用VBA,我正在向Excel中导出一些Access
个查询。此宏正在Access
侧构建。我有一系列查询,例如:
Qs = Array(q1, q2, q3)
我需要count
每个查询中的标头数量,然后找到max
。
根据几次搜索,我发现您可以使用WorksheetFunction.Max
,但我收到了"Object Required" error
。
以下是我尝试的代码引发错误:
WorksheetFunction.Max(Qs(0).Fields.Count, Qs(1).Fields.Count, Qs(2).Fields.Count)
还有其他办法吗?
P.S。我已经添加了对Microsoft Excel 14.0 Object Library
答案 0 :(得分:1)
您报告q1
,q2
和q3
是包含查询名称的字符串变量。
所以问题是String没有Fields
集合。因此,Qs(0).Fields.Count
会触发错误#424,“需要对象”。
如果您需要Fields.Count
,则必须通过合适的对象引用它。
由于Qs(0)
包含查询的名称,您可以使用DAO.QueryDef
CurrentDb.QueryDefs(Qs(0))
(已保存的查询)对象
但是,由于您需要该查询Count
的{{1}},请使用此项:
Fields
另一种解决方法是制作CurrentDb.QueryDefs(Qs(0)).Fields.Count
,q1
和q2
个对象变量而不是字符串......
q3
我在Access 2010中测试了该示例代码,并打印出3个查询中的最大Dim db As DAO.Database
Dim q1 As DAO.QueryDef
Dim q2 As DAO.QueryDef
Dim q3 As DAO.QueryDef
Dim Qs As Variant
Set db = CurrentDb
With db
Set q1 = .QueryDefs("Query1")
Set q2 = .QueryDefs("Query2")
Set q3 = .QueryDefs("Query3")
End With
Qs = Array(q1, q2, q3)
Debug.Print WorksheetFunction.Max(Qs(0).Fields.Count, Qs(1).Fields.Count, Qs(2).Fields.Count)
个。但我不知道这个建议是否可以轻松地与其他代码集成。希望它能为您指出一些有用的东西。