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

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

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

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

Q&A

解決済

1回答

7402閲覧

エクセルVBA:20人分の”テスト結果”を、連続PDF化エクスポートし、それぞれにメール送信したい

yoichiyy

総合スコア55

VBA

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

0グッド

0クリップ

投稿2019/08/14 06:47

編集2019/08/14 10:51

(8月14日20時追記)
※追加・修正依頼を頂きどうもありがとうございました。
我ながら分かりづらいと思いましたので…。「状況」「やりたいこと」を冒頭に追記し、
「悩んでいること」の説明を編集しました。

■状況
エクセルに以下2つのデータがあります。
●顧客20人分のデータ
●「テスト結果表示(顧客に返却する)」のテンプレート

■やりたいこと
・テンプレート内の値は、vlookupで20人分のデータを参照しつつ、テンプレート内の【顧客名】【結果】の表示を変えていくようになっています。
・顧客20人それぞれに、結果のPDFをメール送信したい。そのプロセスをマクロで一括処理したい。

※メールはgmailをgoogle Chromeで使用中。現在google app scriptを勉強中ということもあるので、
最終的にはエクセルマクロもそうだが、スプレッドシートとGASで同じ操作をできるようになりたい。

■昨日(8月13日)マクロを動かしたところ、
◯PDF化は成功したが、
☓1番目のPDFだけ保存され、2番目以降のPDFは保存されなかった。
(PDF保存をしている様子はありましたし、エラーにもなりませんでした。)

☓さらに本日(8月14日)には、マクロは何も変えていないのですが、PDF1枚の出力すらできなくなっていました…。

■悩んでいる部分は以下の通りです。
A.なぜ、上の失敗が起こったのか? 下記コードをどのように修正すればよいか?
B.まだメール送信部分は実装していないのですが、VBAでgmail送信までは難しいでしょうか。
C.そうだとしたらば、次のステップとして上記を実現するためのgoogle app scriptのコードを知りたいと思っています。(本スレッドはVBAというタグを付けましたので、このスレッドで難しいようであれば、別の「JAVA」というタグをつけて別途質問を投稿しようと思います。

どうぞ、よろしくお願い致します。

===============
エクセルで以下のようなマクロを組みました。

Dim Startp As Integer
Dim Endp As Integer
Dim i As Integer
Dim fileName As String
Dim yourName As String

Startp = Worksheets("graph").Range("s1").Value //〜から
Endp = Worksheets("graph").Range("t1").Value //〜まで
yourName = Worksheets("graph").Range("l1").Value //顧客の氏名
fileName = ThisWorkbook.Path & "アンケート" & yourName & "様.pdf""" //PDFエクスポート

For i = Startp To Endp
Worksheets("graph").Range("s1") = i
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName
Next i

End Sub
===============

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

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

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

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

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

papinianus

2019/08/14 09:29

上手く動かないマクロではなく、望む動作として何をやりたいかを質問文で明らかにしてください。 あと、VBAとgoogle app scriptではユーザ層が違うのでどちらの回答が欲しいかを明示して、タグを厳選してください
papinianus

2019/08/14 09:30

連続印刷とは何ですか?顧客別にPDFを作ればいいのですか?連続でなければ作れることがわかっているということですか?
meg_

2019/08/14 10:37

「Startp」と「Endp」は何を意味していますか? 上記コードでは、同じPDFを複数回出力しているだけかと思います。
yoichiyy

2019/08/14 10:52

papinianus様 ご指摘を、どうもありがとうございました。連続印刷という表現も相当わかりづらいものだったので、質問文を根こそぎ修正致しました。
yoichiyy

2019/08/14 10:56

meg_様 「連続印刷マクロ」(例:http://www.excel.studio-kazu.jp/kw/20140711161121.html)のコードを参考に、上のVBAを組みました。 エクセルシート上には、 《S1》から《T1》までという印刷をしたい顧客番号を入力するセルがあります。 例えば1番から15番の顧客の「分析結果」をPDF化したい場合は、 S1に1 T1に15を入力します。 最初は顧客1番が表示されているので、この状態でPDF化をすると、顧客1番の情報がPDF化されます。 次に next i で、S1セルは2になります。顧客2番がテンプレート内に表示されます。 この状態でPDF化をすると、顧客2番の情報がPDF化され保存される…という考えで作りました(が、うまくいかない…) Startpは、開始番号(S1) Endpは、最後の顧客番号(T1)をそれぞれ表しています。
guest

回答1

0

ベストアンサー

「fileName」が固定されているので、PDFファイルが上書きされているのではないですか?

【追記】下記コードを試しました。

vba

1Sub test_NG() 2 3 Dim Startp As Integer 4 Dim Endp As Integer 5 Dim i As Integer 6 Dim fileName As String 7 Dim yourName As String 8 9 Startp = Worksheets("graph").Range("s1").Value 10 Endp = Worksheets("graph").Range("t1").Value 11 yourName = Worksheets("graph").Range("l1").Value 12 fileName = ThisWorkbook.Path & "アンケート" & yourName & "様.pdf" 13 14 For i = Startp To Endp 15 Worksheets("graph").Range("s1") = i 16 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName 17 Next i 18 19End Sub

結果は、マクロブックの1つ上のディレクトリにPDFが1つ作成されました。
下記修正が必要かと思われます。

vba

1Sub test() 2 3 Dim Startp As Integer 4 Dim Endp As Integer 5 Dim i As Integer 6 Dim fileName As String 7 Dim yourName As String 8 9 Startp = Worksheets("graph").Range("s1").Value 10 Endp = Worksheets("graph").Range("t1").Value 11 12 For i = Startp To Endp 'ループ内で「yourName」「fileName」を生成する 13 Worksheets("graph").Range("s1") = i 14 yourName = Worksheets("graph").Range("l1").Value 15 fileName = ThisWorkbook.Path & "\アンケート" & yourName & "様.pdf" 'ディレクトリ区切りを追加 16 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName 17 Next i 18 19End Sub

投稿2019/08/14 11:16

編集2019/08/14 11:52
meg_

総合スコア10579

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

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

yoichiyy

2019/08/14 11:23

fileNameの最後に "アンケート" & yourName & "様.pdf"とあります。 yourNameはL1セルを参照しており、 ここには(説明不足ですみません)顧客名が入っています。 next i でS1セルの数字が1増加すると、 顧客名もvlookup参照によって、次の顧客名に切り替わります。 それが、少なくともエクセル上ではうまく切り替わっている様子は、確認できております…。
meg_

2019/08/14 11:55

回答に追記しましたが、マクロで変数をデバッグして変数の内容を確かめるようにしてください。 文字列は再度代入しないと値は変わりませんよ。
yoichiyy

2019/08/14 12:50 編集

文字列の再代入のこと、大変ありがたいアドバイスでした。 どうもありがとうございます! また、バックスラッシュがなくなっていたのは、こちらに質問として投稿した時に誤って編集してしまったもののようです。これで「昨日はできたのに、今日はできなくなった」という原因があるようです。こちらも、ご指摘くださり(デバッグのことについてもお教え頂き)ありがとうございます。 そして結果なのですが、今度はなぜか別のエラーに見舞われております…。 実行時エラー1004「ドキュメントを保存できませんでした。ドキュメントが開いているか、保存時にエラーが発生した可能性があります。」 エラー本文で検索したところいくつか過去の投稿が出てきたので片っ端から試しているところです。 パソコンの設定等に問題があるのかと思い、もう一つのパソコン(こちらはKINGSOFTのWPS) 実行時エラー5:プロシージャの呼び出し、または引数が不正です。 となりました。 デバッグをするといずれの場合も、 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName がハイライトされます。 昨日の時点では、少なくとも1つのPDF化ができただけにくやしいです… =============== さらにその後、MACのオフィスエクセルで試したところ、 実行時エラー1004: 指定したディメンションは、このグラフの種類では無効です。 というエラーが出てきました。 ググったところ、いくつかの過去投稿がありましたので、これらを手がかりにもう少し試行錯誤を進めてみようと思います。
meg_

2019/08/14 13:47

関係あるかは分かりませんが、「ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName」のコードで「ActiveSheet」ではなく、シート名等でシートを指定した方が良いです。操作によってはActiveSheetが想定したものと違っている場合もありますので。
yoichiyy

2019/08/17 20:48

いろいろと試した結果、最終的にはActiveSheetを使用することになりました・・・が、ファイル名設定のところに問題があったようでした。 fileName = ThisWorkbook.Path & "\アンケート" & yourName & "様.pdf" この部分の、何がまずいのかは未だにわからないのですが、 fileName = ThisWorkbook.Path & "\" & yourName & "様.pdf" にしたところ、正常にファイルが出力されるようになりました。 親身にアドバイスを下さり、本当にどうもありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問