在Access 2007中,是否可以循环自定义类别中的项目?

时间:2013-04-12 14:09:56

标签: vba ms-access

在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”

1 个答案:

答案 0 :(得分:2)

我刚刚做了这个,所以我没有给它任何严格的测试,但它似乎列出了分配给自定义类别的所有对象

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;

如果某个类别包含多种类型的对象(例如,表格和查询),则可能会扩展为返回对象类型。