在 Access 2007 的导航窗格中,我们有“自定义”类别,可以创建自定义类别、为其命名、添加表格、查询等。VBA 是否可以循环访问自定义类别中的所有项目?
例如,我创建了一个名为“Validations”的类别,它包含 5 个查询。我想遍历每个查询并运行它。在伪代码中,它看起来像这样:
For Each Query in Validations
DoCmd.OpenQuery "Query"
编辑:我开始研究它,看起来我需要访问 MSysNavPaneGroups 表来获取我的自定义组的 ID。在我的情况下,ID = 235
此外,是否可以在此过程中创建 Excel 电子表格,如果查询返回 >0 行,是否将这些行粘贴到 Sheet1、Sheet2 等?就像是:
Count = 1
For Each Query in Validations
DoCmd.OpenQuery "Query"
If Query.Rows > 0
Excel.Sheet(i).Name = Query.Name
Excel.Sheet(i).Rows = Query.Rows
Count = Count + 1
End If
我自己什至还没有开始研究 Excel 部分,所以如果你不想弄乱它也没关系。我更关心遍历自定义类别中的查询。
一如既往,谢谢!
编辑:我使用下面的 Gord 的 SQL 创建了一个名为“GetValidationNames”的查询:
SELECT MSysNavPaneGroups.Name AS GroupName, MSysNavPaneGroupToObjects.Name AS ObjectName
FROM MSysNavPaneGroups INNER JOIN MSysNavPaneGroupToObjects
ON MSysNavPaneGroups.Id = MSysNavPaneGroupToObjects.GroupID
WHERE (((MSysNavPaneGroups.GroupCategoryID)=3))
ORDER BY MSysNavPaneGroups.Name, MSysNavPaneGroupToObjects.Name;
然后创建了一个带有按钮的表单,并在 Button_Click() 中添加了以下内容:
Dim rs as Recordset
Set rs = CurrentDb.OpenRecordset("GetValidationNames")
Do While Not rs.EOF
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, rs("ObjectName"), _
"C:\users\username\Desktop\ValidationResults.xlsx"
rs.MoveNext
Loop
这会运行所有查询,并将每个查询作为新选项卡添加到现有 Excel 文件“ValidationResults.xlsx”中