質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

1039閲覧

取引先CD別でexcel出力し、添付してメールを送りたいです。

3298.f56

総合スコア1

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2020/09/16 12:15

お世話になります。
初心者のためお力添え願います。

前提・実現したいこと

access2019を使用しております。
以下の単価一覧クエリから、取引先CD別で、C:\取引先別単価表フォルダへexcel出力し、
連絡先テーブルにある同一の取引先CDのメールアドレスへ添付してメールを送りたいです。
excelのファイル名を取引先名でお願いします。

#####連絡先テーブル

取引先CD取引先名メールアドレス
A山田商店yamada@yamada-syoten.co.jp
B佐藤青果satou@satou-seika.co.jp
C鈴木屋suzuki@suzuki-ya.co.jp
・・・・・・・・・

#####単価一覧クエリ

取引先CD取引先名品名単価
A山田商店りんご100
A山田商店ぶどう200
A山田商店バナナ50
B佐藤青果なし100
C鈴木屋キウイ80
C鈴木屋マンゴー300
・・・・・・・・・・・・

#####C:\取引先別単価表\山田商店.xlsx

取引先CD取引先名品名単価
A山田商店りんご100
A山田商店ぶどう200
A山田商店バナナ50

#####C:\取引先別単価表\佐藤青果.xlsx

取引先CD取引先名品名単価
B佐藤青果なし100

#####C:\取引先別単価表\鈴木屋.xlsx

取引先CD取引先名品名単価
C鈴木屋キウイ80
C鈴木屋マンゴー300

#####最終的に
山田商店.xlsxを、yamada@yamada-syoten.co.jpへメール
佐藤青果.xlsxを、satou@satou-seika.co.jpへメール
鈴木屋.xlsxを、suzuki@suzuki-ya.co.jpへメール
以下、取引先CD全てで繰り返したいです。

自分で調べたことや試したこと

excel添付しメール送信するvbsを別で作成し、1つのクエリのexcelに出力と、vbsの実行をマクロで行うことは出来たのですが、
取引先CD別に全てexcel出力して、かつ取引先CDに対してメール送信する方法が思い浮かびませんでした。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuma_kuma_

2020/09/16 23:16

ごめんなさい細かい事なんですが「なし」は「梨」という事でいいのでしょうか?
3298.f56

2020/09/16 23:20

はい、「梨」の意味になります。 表記が分かりづらかったですね、すいません。
guest

回答2

0

ベストアンサー

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

投稿2020/09/17 00:48

kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

3298.f56

2020/09/17 06:47

kuma_kuma_様 ご回答ありがとうございます。 コードを試させて頂きます。 まずはお礼申し上げます。
3298.f56

2020/09/21 05:36

kuma_kuma_様 コードを実行させてみましたが、"C:\取引先別単価表\"フォルダの作成もされず、 excelの出力もされませんでした。 自分自身の勉強のため、頂いたコードについて検証させて頂きます。 またベストアンサーとさせて頂きます。 ありがとうございました。
3298.f56

2020/09/24 03:56

kuma_kuma_様 アドバイスありがとうございます。 サイトを参考にさせて頂きます。
guest

0

こんな感じで2重ループにすれば問題ないかと思いますが?

とりあえずADOで書いておきます。
DAOでも大丈夫です。

でもDoCmd.TransferSpreadsheetを使ってExcel出力していると、
この方法が使えませんのでそちらは別回答に書きます。

VBA

1'参照設定に[Microsoft ActiveX Data Object 6.1 Library]を設定してください 2Sub Test() 3 4 Dim cnn As ADODB.Connection 'コネクション 5 Dim RecMain As ADODB.Recordset 'レコードセット 6 Dim Rec As ADODB.Recordset 'レコードセット 7 Dim SQLs As String 'SQL文字列 8 9On Error GoTo Test_Err: 10 11 '----- データベース接続 12 Set cnn = CurrentProject.Connection 13 14 '----- レコードセット取得(スナップショット) 15  SQLs = "SELECT 連絡先テーブル.取引先CD, " 16 SQLs = SQLs & "連絡先テーブル.[メールアドレス] " 17 SQLs = SQLs & "FROM 連絡先テーブル " 18 SQLs = SQLs & "ORDER BY 連絡先テーブル.取引先CD; " 19 Set RecMain = New ADODB.Recordset 20 With RecMain 21 .ActiveConnection = cnn 22 .CursorType = adOpenStatic 23 .LockType = adLockReadOnly 24 .Open Source:=SQLs 25 End With 26 27 '----- 取引先の情報取得 28 Do Until RecMain.EOF 29 '----- 取引先毎の情報取得 30 SQLs = "SELECT 単価一覧クエリ.取引先CD, 単価一覧クエリ.取引先名, 単価一覧クエリ.品名, 単価一覧クエリ.単価 " 31 SQLs = SQLs & " FROM 単価一覧クエリ " 32 SQLs = SQLs & "WHERE (((単価一覧クエリ.取引先CD)=""" & RecMain![取引先CD] & """)) " 33 SQLs = SQLs & "ORDER BY 単価一覧クエリ.取引先CD, 単価一覧クエリ.品名; " 34 Set Rec = New ADODB.Recordset 35 With Rec 36 .ActiveConnection = cnn 37 .CursorType = adOpenStatic 38 .LockType = adLockReadOnly 39 .Open Source:=SQLs 40 End With 41 42 Do Until Rec.EOF 43 '----- フィールド値の取得 44 'Debug.Print Rec![取引先CD] 45 'Debug.Print Rec![取引先名] 46 'Debug.Print Rec![品名] 47 'Debug.Print Rec![単価] 48 49 '----- 次のレコードへ移動 50 Rec.MoveNext 51 Loop 52 53 '----- 次のレコードへ移動 54 RecMain.MoveNext 55 Loop 56 57Test_End: 58On Error Resume Next 59 '----- 終了処理 60 Rec.Close: Set Rec = Nothing 61 RecMain.Close: Set RecMain = Nothing 62 cnn.Close: Set cnn = Nothing 63Exit Sub 64 65'----- エラー処理 66Test_Err: 67Resume Test_End: 68End Sub 69

投稿2020/09/17 00:01

kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問