🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

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

Q&A

解決済

2回答

2022閲覧

SendObjectで添付ファイル名に日時を追加したい

techiko

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

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

0グッド

0クリップ

投稿2019/10/09 03:46

編集2019/10/10 02:20

レポートをPDFでメールに添付する際に
添付されるファイル名に日時を追加したいのです。
Format(Now(), "yyyymmdd_hhnnss") でいろいろ試しましたが
知識不足のためなかなかうまくできません…
ご教示いただけませんでしょうか?

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

Private Sub コマンド10_Click() DoCmd.RunCommand acCmdSaveRecord Dim atesaki As String Dim kenmei As String atesaki = "---@---" kenmei = "レポートをお送りいたします" Dim honbun As String Dim honbun2 As String Dim honbun3 As String Dim honbun4 As String Dim zenbun As String honbun = "__様" honbun2 = "お世話様です。" honbun3 = "レポートを添付いたします。" honbun4 = "よろしくお願いいたします。" zenbun = honbun & vbCrLf & honbun2 & vbCrLf & honbun3 & vbCrLf & honbun4 Const cstrRptName As String = "レポート" On Error GoTo Err_Handler Echo False DoCmd.OpenReport "レポート", acViewPreview, , "報告ID=" & Me!報告ID DoCmd.SendObject acSendReport, "レポート", acFormatPDF, atesaki, "", "", kenmei, zenbun, True, """" Exit_Here: On Error Resume Next DoCmd.Close acReport, cstrRptName Echo True Exit Sub Err_Handler: If Err.Number = 2501 Then Else MsgBox "エラーが発生しました" End If Resume Exit_Here: End Sub

追記です
いろいろ検索し以下の部分を

Cmd.OpenReport "レポート", acViewPreview, , "報告ID=" & Me!報告ID DoCmd.SendObject acSendReport, "レポート", acFormatPDF, atesaki, "", "", kenmei, zenbun, True, """"

以下に書き換えてみました。

DoCmd.CopyObject , "レポート_" & Format(Now(), "yyyymmdd_hhnnss"), acReport, "レポート" DoCmd.SendObject acSendReport, "レポート_" & Format(Now(), "yyyymmdd_hhnnss"), acFormatPDF, atesaki, "", "", kenmei, zenbun, True, "" DoCmd.DeleteObject acRepory, "レポート_" & Format(Now(), "yyyymmdd_hhnnss")

メール作成画面が開くと、PDFファイル名は変わっておらず、すべてのページのレポートになってしまっています。
メール作成画面を閉じると名前に日時のついたレポートがレポート内に出現します。
削除もされないようです…

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

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

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

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

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

tatsu99

2019/10/09 07:00

Format(Now(), "yyyymmdd_hhnnss") でOKだと思いますが、なにがだめなんでしょうか。
techiko

2019/10/09 08:03

メールに添付するファイル名にFormat(Now(), "yyyymmdd_hhnnss")を使用して 日時をプラスしたかったのですが、それはできない旨Y.H.さんよりご指摘がありました。
guest

回答2

0

ベストアンサー

DoCmdは非同期実行のため連続しての使用はできないようですね。

以下では解決できなかった模様です


添付ファイルのファイル名は、レポート名から変更できません。

DoCmd.CopyObjectでレポートを日付付きのレポート名にコピーしてから、コピーした日付付きのレポートを指定してDoCmd.SendObjectを呼び出してください。
呼び出し後、日付付きのレポートは削除してください。


以下追記:

DoCmdはすべて非同期で実行されるため処理の終了まで適当な時間待ちを入れないとうまく動かないので、Private Sub コマンド10_Click() の前の行にDeclare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)の1行を入れて、Sleepを使用する。

VBA

1Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 2Private Sub コマンド10_Click() 3・・・略・・・ 4 Dim ReportName As String 5 ReportName = "レポート_" & Format(Now(), "yyyymmdd_hhnnss") 6 7 DoCmd.CopyObject , ReportName, acReport, "レポート" 8 sleep 3000 '3000 msec (3 秒)待つ 9 DoCmd.OpenReport ReportName, acViewPreview, , "報告ID=" & Me!報告ID 10 sleep 3000 '3000 msec (3 秒)待つ 11 DoCmd.SendObject acSendReport, ReportName, acFormatPDF, atesaki, "", "", kenmei, zenbun, True, "" 12 sleep 3000 '3000 msec (3 秒)待つ 13 DoCmd.DeleteObject acRepory, ReportName 14 15・・・略・・・ 16End Sub

投稿2019/10/09 07:00

編集2019/10/10 07:10
Y.H.

総合スコア7918

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

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

techiko

2019/10/09 08:01

回答ありがとうございます。 ちょっと試してみます。
techiko

2019/10/10 02:27

コードを編集してみたのですがうまく動きませんでした… 内容は追記としました。
Y.H.

2019/10/10 02:52 編集

Dim ReportName As String ReportName = "レポート_" & Format(Now(), "yyyymmdd_hhnnss") DoCmd.CopyObject , ReportName, acReport, "レポート" Cmd.OpenReport ReportName, acViewPreview, , "報告ID=" & Me!報告ID DoCmd.SendObject acSendReport, ReportName, acFormatPDF, atesaki, "", "", kenmei, zenbun, True, "" DoCmd.Close acReport, ReportName DoCmd.DeleteObject acRepory, ReportName
Y.H.

2019/10/10 02:54 編集

でできないでしょうか? ※今Accessが無い端末しか使用できないので動作確認はできてません。
techiko

2019/10/10 03:39

ありがとうございます。 試してみたところ、添付ファイルの名前はそのままでした。 また、送信後、実行時エラー’7874’がでてレポート_日時が見つからない旨表示されました。 Accessのレポート内にはレポート_日付のファイルがきちんとできています。 もう少し調べてみます。
Y.H.

2019/10/10 04:19

あぁ・・・DoCmdは非同期実行でした。 とりあえず対応ですが、DoCmd実行後に3秒づつ待つApplication.Wait()を以下のように入れてみるとどうでしょうか?(実行時間が計10秒ほどになってしまいますが・・・) Dim ReportName As String ReportName = "レポート_" & Format(Now(), "yyyymmdd_hhnnss") DoCmd.CopyObject , ReportName, acReport, "レポート" Application.Wait(Now + TimeValue("0:00:03")) DoCmd.OpenReport ReportName, acViewPreview, , "報告ID=" & Me!報告ID Application.Wait(Now + TimeValue("0:00:03")) DoCmd.SendObject acSendReport, ReportName, acFormatPDF, atesaki, "", "", kenmei, zenbun, True, "" Application.Wait(Now + TimeValue("0:00:03")) DoCmd.DeleteObject acRepory, ReportName
techiko

2019/10/10 05:10

何度も申し訳ありません。 .wait がコンパイル エラーになってしまいます。(メソッドまたはデータ メンバが見つかりません)
Y.H.

2019/10/10 05:53

すみません。wait()があるのはExcelでした。。。 回答に追記したコードでうまく動いてくれないですかね。。。
techiko

2019/10/10 06:23

ありがとうございます。。。 Private Sub コマンド10_Click()の前に挿入すると イベントプロパティに指定した式 読み込み時 でエラーが発生しました と出てしまうので標準モジュールに追加して実行してみましたが 待ち時間は長くなったものの結果は同じでした。 →ファイル名に日時が付かない、コピーされたファイルが削除されない
Y.H.

2019/10/10 06:30

う~ん、うまくいかないですねぇ。。。 Sleepの行を全部コメントにして、 ステップ実行でDoCmdの行毎に少し時間を空けて 実行するとうまく動きますか?
techiko

2019/10/10 06:45

同じ結果でした。 そして、今気づいたのですが添付されたpdfは特定のレポートのみとなっていますが 日時が付いてコピーされたレポートはすべてのレポートがコピーされたものでした。
techiko

2019/10/10 07:02

Y.H.さん 貴重なお時間をいただきありがとうございました。 SendObjectから行うのは厳しそうなのであきらめてほかの方法を探そうと思います。 本当にどうもありがとうございました。
Y.H.

2019/10/10 07:08

お役に立てませんでした。 頑張ってくださいね。
techiko

2019/10/10 07:09

とんでもないです! 勉強になりました。 どうもありがとうございました。
guest

0

投稿2019/10/09 03:57

y_waiwai

総合スコア88040

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

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

techiko

2019/10/09 05:29

ご回答ありがとうございます 参考ページありがとうございます。 このコードをどのように埋め込んだらファイル名の後に日時が入れられるかがわかりません…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問