最も初歩的な形式では、探しているのは次のような VBA コードです。
Public Function DumpTempsByCaseToExcel() As Boolean
Dim cdb As DAO.Database, rst As DAO.Recordset, qdf As DAO.QueryDef
Const OutPath = "C:\Users\Gord\Desktop\"
Const DataTableName = "Temperatures"
Const TempQueryDefName = "zzzTempQuery"
Set cdb = CurrentDb
Set rst = cdb.OpenRecordset("SELECT DISTINCT caseID FROM [" & DataTableName & "]", dbOpenSnapshot)
Do While Not rst.EOF
On Error Resume Next
cdb.QueryDefs.Delete TempQueryDefName
On Error GoTo DumpTempsByCaseToExcel_Error
Set qdf = cdb.CreateQueryDef(TempQueryDefName, "SELECT * FROM [" & DataTableName & "] WHERE caseID=""" & rst!caseID & """")
Set qdf = Nothing
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, TempQueryDefName, OutPath & rst!caseID & ".xlsx"
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set cdb = Nothing
DumpTempsByCaseToExcel = True
Exit Function
DumpTempsByCaseToExcel_Error:
MsgBox Err.Description, vbCritical, "Runtime error " & Err.Number
DumpTempsByCaseToExcel = False
End Function
仮定:
[caseID] の値は英数字です。数値の場合は、WHERE 句を作成するコードで引用符をいじる必要があります。
[caseID] 値は、有効な Windows ファイル名として使用できます。Windows のファイル名で無効な文字が含まれている場合は、Replace()
関数のようなものを使用してそれらを削除するか、別のものにマップする必要があります。
宛先フォルダーが空であるか、少なくとも作成するファイルと同じ名前のファイルが含まれていません。記述されているサンプル コードは、既存のファイルを上書きする可能性があります。