计算Access Query中的标头数量并查找最大值

时间:2015-12-16 00:12:38

标签: vba ms-access access-vba

我正在使用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

的引用

1 个答案:

答案 0 :(得分:1)

您报告q1q2q3是包含查询名称的字符串变量。

所以问题是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 q1q2个对象变量而不是字符串......

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) 个。但我不知道这个建议是否可以轻松地与其他代码集成。希望它能为您指出一些有用的东西。