2013-04-12 76 views
2

在Access 2007的導航窗格中,我們有「自定義」類別,可以創建一個自定義類別,將其命名,並添加表格,查詢等。是否可以使用VBA循環自定義所有項目類別?在Access 2007中,是否可以循環自定義類別中的項目?

例如,我創建了一個名爲「驗證」類別,它包含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部分,所以沒關係,如果你不想惹它。我更關心循環查看自定義類別中的查詢。

一如既往,謝謝!

編輯:我創建使用下面戈德的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」

+0

檢查'MSysNavPane *'系統表。他們掌握有關組的信息以及哪些數據庫對象與它們相關聯。我不知道檢索所需信息的正確方法,但是...我在對象模型中沒有看到任何方法。 – HansUp

+0

@HansUp謝謝你..我看我可以從MSysNavPaneGroups和查詢的ID從MSysNavPaneGroupToObjects獲得組ID –

+0

呀,你也許可以創造一個新的查詢要返回的是自定義組的成員查詢的名稱。但是,我不願意依賴查詢系統表。當我在Access 2007中看到有人在MSysObjects上遇到*「沒有讀取權限」的報告時,我關閉了。我不知道您是否可能遇到類似的問題,試圖讀取「MSysNavPane *」表。 – HansUp

回答

2

我只是熟了這個,所以我沒有給它任何rigoro我們的測試,但它似乎列出所有分配到自定義類別

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; 

它可能會擴展到返回的對象類型,如果一個類中包含多種類型的對象(如表和查詢)的對象。

+0

謝謝..這沒有工作來返回特定自定義組中的查詢(對象)列表:) –

+0

@JeffBrady不客氣。 re:Excel部分 - 如果你不想直接混淆Excel自動化,你可以將你的計數存儲在一個Access表中並使用'docmd.TransferSpreadsheet acExport,...'在完成後將它導出到Excel 。 –

+0

是的,這可能更有意義。謝謝! –

相關問題