2009-09-21 19 views
1

我需要寫一些VBA/SQL代碼到Access中的一個模塊,它應該做以下一些幫助:如何在Access VBA/SQL中創建一個循環來選擇記錄並輸出到Excel?

  • 遍歷表「學校」,只有一個字段(SchoolName) 。

  • 使用在第一個表的每個值從表「ChildData」選擇記錄,有個別孩子的幾個領域,包括他們參加(SchoolName)哪所學校。

  • 對於每所學校,將其參加學習的孩子的數據導出到爲該學校命名的單獨的Excel工作簿中。

任何人都可以給我任何出發點嗎?請注意,我對VBA或SQL幾乎一無所知,而且幾乎從頭開始,因此即使是最基本的解釋也會非常有幫助!

感謝, AVN

+0

您是否可以創建包含學校和ChildData的查詢? – JeffO 2009-09-21 14:58:02

+0

我有一張桌子,裏面包含了我需要的所有信息,是您的意思嗎? 也許我已經過度複雜了,建議通過一個單獨的列表中所有的學校,並逐個拉出來? – AVN 2009-09-21 15:13:31

回答

0

它會更簡單,以創造其加入學校的兩個表的查詢,然後使用Excel中樞軸與學校的網頁,並使用show頁面獲得每個學校在一個單獨的頁面上

如果你想這樣做更復雜的方式,那麼在VBA中,你需要從學校表中顯示所有學校的記錄集,以及來自具有必需字段的子數據的記錄集和針對學校領域。

然後在VBA中使用DO循環控制,其進行的同時school.EOF = false,併爲每所學校記錄獲得childdata記錄,並把它到Excel

我會傾向於做這在Excel VBA並使用copyfromrecordset將數據放入Excel中 - 簡單地爲每個學校創建一個新工作表並將工作表名稱設置爲學校。您需要將相關引用添加到VBA項目 - DAO或ADO - 才能連接到Access數據。

+0

我真的需要它將每個學校的數據輸出到一個單獨的文件,因爲這些數據將發送到學校,我們必須保護個人的兒童數據。 所以不幸的是,它必須是比數據透視表更復雜的方法。 另外,我寧願在一個單一的Access數據庫中做所有的工作,因爲每月運行這個報告的人在訪問或excel上都不那麼熱,所以我想要「一次點擊」可能。 訪問選項的更多提示? – AVN 2009-09-21 14:57:50

1

我看不到任何問題,表明您需要任何複雜的東西。

第一步是創建一個連接學校和學生的查詢,當它運行時,通過菜單導出到Excel。如果這樣做,那麼你需要改變它,以便你一次輸出一所學校。這樣做的「簡單」方法是在學校添加一個參數,以便每次查詢運行時,您只顯示一所學校。

現在,如果你想自動化,它會變得更加複雜,因爲參數會阻礙。

所以,我的建議是創建一個未綁定的窗體,其上有一個組合框,顯示學校列表。然後,使用作爲標準,該組合框的引用您的查詢,並用它來驅動後面的代碼命令按鈕:

Private Sub cmdOutputSchool_Click() 
    If IsNull(Me!cmbSchool) Then 
     MsgBox "You must first choose a school from the dropdown.", _ 
     vbExclamation, "Choose a school" 
    Else 
     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _ 
     "qrySchoolOutput", CurrentProject.Path & "\" & Me!cmbSchool & ".xls" 
    End If 
    End Sub 

現在,這並不自動執行的過程,但它至少使它便於連續輸出每個報告。

如果你想讓它自動化,一個簡單的方法就是將表單綁定到Schools表,並將你的查詢綁定到表單上學校名稱的顯示。然後,你可以有通過表單和輸出報表爲每所學校的記錄命令按鈕散步:

Private Sub cmdOutputSchool_Click() 
    With Me.RecordsetClone 
     .MoveFirst 
     Do Until .EOF 
     Me.Bookmark = .Bookmark 
     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _ 
      "qrySchoolOutput", CurrentProject.Path & "\" & Me!SchoolName & ".xls" 
     .MoveNext 
     Loop 
    End With 
    End Sub 

這將輸出爲表中的每個學校你已經綁定到形式的電子表格。

+0

謝謝大衛,看起來它會做我想做的。 我會在接下來的幾天嘗試一下,讓你知道。 Avn – AVN 2009-09-22 09:11:04

0

如前所述,您可以在字符串內使用「」來獲得報價。例如:

MsgBox "I am an ""Example""." 

至於另一方面,你並不真的需要VBA來做到這一點。您可以使用查詢做到這一點:

SELECT ChildData.* INTO [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Example.xls].[MyWorksheet] 
FROM ChildData INNER JOIN Schools ON ChildData.SchoolName = Schools.SchoolName; 

當然你也可以從VBA做同樣的事情,如果你真的想,像這樣:

CurrentDB.Execute "SELECT ChildData.* INTO [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\Example.xls].[MyWorksheet] FROM ChildData INNER JOIN Schools ON ChildData.SchoolName = Schools.SchoolName;" 

還有另一種方式是創建一個選擇查詢那拉你的數據,然後使用DoCmd.OutputTo:

DoCmd.OutputTo acOutputQuery,"MyQuery",acFormatXLS,"C:\Test.xls" 

您還可以使用DoCmd.TransferSpreadsheet:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "MyQuery", "C:\Test.xls", True 
相關問題