tylko zaznajomienie się trochę VBA (ten materiał nowego mi więc o wyrozumiałość!)Eksportowanie rekordów do arkusza kalkulacyjnego
Od zapytania ContactDetails_SurveySoftOutcomes, staram się najpierw znaleźć listę wszystkich unikalnych wartości w W tym zapytaniu pole DeptName, a zatem rsGroup
Dim przechowujące kwerendę zgrupowaną w polu DeptName.
Mam zamiar użyć tej zgrupowanej listy jako sposobu na cykliczne powtarzanie tego samego zapytania, ale przechodzenie przez każdy unikalny wpis jako filtr całego zestawu rekordów i eksportowanie każdego przefiltrowanego zestawu rekordów do własnego arkusza kalkulacyjnego Excel ... zobacz pętlę Do While Not
.
Mój kod potknął się o część DoCmd.TransferSpreadsheet
... rsExport
. Jestem trochę nowy w tym, ale domyślam się, że moje Dim nazwy rsExport
dla zestawu rekordów nie jest akceptowane w tej metodzie ..?
Czy istnieje łatwa poprawka do kodu, który już rozpocząłem, czy też powinienem zastosować zupełnie inne podejście, aby to wszystko osiągnąć?
Kod:
Public Sub ExportSoftOutcomes()
Dim rsGroup As DAO.Recordset
Dim Dept As String
Dim myPath As String
myPath = "C:\MyFolder\"
Set rsGroup = CurrentDb.OpenRecordset("SELECT ContactDetails_SurveySoftOutcomes.DeptName " _
& "FROM ContactDetails_SurveySoftOutcomes GROUP BY ContactDetails_SurveySoftOutcomes.DeptName", dbOpenDynaset)
Do While Not rsGroup.EOF
Dept = rsGroup!DeptName
Dim rsExport As DAO.Recordset
Set rsExport = CurrentDb.OpenRecordset("SELECT * FROM ContactDetails_SurveySoftOutcomes " _
& "WHERE (((ContactDetails_SurveySoftOutcomes.DeptName)='" & Dept & "'))", dbOpenDynaset)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, rsExport, myPath & Dept & "\" & Dept & " - Soft Outcomes Survey.xls", True
rsGroup.MoveNext
Loop
End Sub
Poprawiono kod:
Public Sub ExportSoftOutcomes()
Dim rsGroup As DAO.Recordset
Dim Dept As String
Dim myPath As String
myPath = "C:\MyFolder\"
Set rsGroup = CurrentDb.OpenRecordset("SELECT ContactDetails_SurveySoftOutcomes.DeptName " _
& "FROM ContactDetails_SurveySoftOutcomes GROUP BY ContactDetails_SurveySoftOutcomes.DeptName", dbOpenDynaset)
Do While Not rsGroup.EOF
Dept = rsGroup!DeptName
Dim rsExportSQL As String
rsExportSQL = "SELECT * FROM ContactDetails_SurveySoftOutcomes " _
& "WHERE (((ContactDetails_SurveySoftOutcomes.DeptName)='" & Dept & "'))"
Dim rsExport As DAO.QueryDef
Set rsExport = CurrentDb.CreateQueryDef("myExportQueryDef", rsExportSQL)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "myExportQueryDef", myPath & Dept & "\" & Dept & " - Soft Outcomes Survey.xls", True
CurrentDb.QueryDefs.Delete rsExport.Name
rsGroup.MoveNext
Loop
End Sub
To mówiąc, że ** Aparat bazy danych Microsoft Access nie może znaleźć obiektu ** a następnie wstawia ciąg SQL w komunikacie o błędzie, jak gdyby to nazwa mojego obiekt ... czy brakowało mi kroku? –
wypróbuj edytowane rozwiązanie. – Chris
Tak, to zadziałało. Dziękuję Ci bardzo. –