DoCmd.TransferSpreadsheetを使う想定
クエリは削除追加で取引先毎に更新されます。
とりあえずADOで書いておきます。
DAOでも大丈夫です。
VBA
1'参照設定に[Microsoft ActiveX Data Object 6.1 Library]を設定してください
2'参照設定に[Microsoft ADO Ext. 6.0 for DDL and Security]を設定してください
3Sub Test2()
4
5 Dim cnn As ADODB.Connection 'コネクション
6 Dim RecMain As ADODB.Recordset 'レコードセット
7 Dim SQLs As String 'SQL文字列
8 Dim cat As ADOX.Catalog
9 Dim viw As ADOX.View
10 Dim cmd As ADODB.Command
11 Dim strQueryName As String
12 Dim strPath As String
13
14On Error GoTo Test_Err:
15
16 strQueryName = "Excel出力クエリ"
17
18 '----- データベース接続
19 Set cnn = CurrentProject.Connection
20
21 '----- レコードセット取得(スナップショット)
22 SQLs = "SELECT 連絡先テーブル.取引先CD, "
23 SQLs = "SELECT 連絡先テーブル.取引先名, "
24 SQLs = SQLs & "連絡先テーブル.[メールアドレス] "
25 SQLs = SQLs & "FROM 連絡先テーブル "
26 SQLs = SQLs & "ORDER BY 連絡先テーブル.取引先CD; "
27 Set RecMain = New ADODB.Recordset
28 With RecMain
29 .ActiveConnection = cnn
30 .CursorType = adOpenStatic
31 .LockType = adLockReadOnly
32 .Open Source:=SQLs
33 End With
34
35 '----- 取引先の情報取得
36 Do Until RecMain.EOF
37 '----- 取引先毎の情報取得
38 SQLs = "SELECT 単価一覧クエリ.取引先CD, 単価一覧クエリ.取引先名, 単価一覧クエリ.品名, 単価一覧クエリ.単価 "
39 SQLs = SQLs & " FROM 単価一覧クエリ "
40 SQLs = SQLs & "WHERE (((単価一覧クエリ.取引先CD)=""" & RecMain![取引先CD] & """)) "
41 SQLs = SQLs & "ORDER BY 単価一覧クエリ.取引先CD, 単価一覧クエリ.品名; "
42
43 Set cat = New ADOX.Catalog
44 Set cmd = New ADODB.Command
45 cat.ActiveConnection = CurrentProject.Connection
46
47 '----- クエリーの削除
48 For Each viw In cat.Views
49 If viw.Name = strQueryName Then
50 cat.Views.Delete strQueryName
51 Exit For
52 End If
53 Next viw
54
55 '----- クエリーの追加
56 Set cmd.ActiveConnection = cat.ActiveConnection
57 cmd.CommandText = SQLs
58 cat.Views.Append strQueryName, cmd
59
60 Set cat = Nothing
61 Set cmd = Nothing
62
63 '----- Excelファイルエクスポート
64 strPath = "C:\取引先別単価表\" & RecMain![取引先名] & ".xlsx"
65 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, strQueryName, strPath, True
66
67 '----- 次のレコードへ移動
68 RecMain.MoveNext
69 Loop
70
71Test_End:
72On Error Resume Next
73 '----- 終了処理
74 Rec.Close: Set Rec = Nothing
75 RecMain.Close: Set RecMain = Nothing
76 cnn.Close: Set cnn = Nothing
77Exit Sub
78
79'----- エラー処理
80Test_Err:
81Resume Test_End:
82End Sub