teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2017/06/07 08:14

投稿

jawa
jawa

スコア3020

answer CHANGED
@@ -73,6 +73,111 @@
73
73
  Next
74
74
 
75
75
  End Sub
76
+ ```
76
77
 
78
+ コメントを受けて追記
79
+ ---
77
80
 
81
+ やりたいこととしては、
82
+ ①ファイル1を取得
83
+ ②ファイル2を取得してファイル1に結合 ⇒結合ファイルが作成される
84
+ ③ファイル3を取得して前回の結合ファイルに結合 ⇒結合ファイルが更新される
85
+ というかんじであっていますでしょうか?
86
+
87
+ 上記であれば、プログラムでも
88
+ ①ループ1周目:ファイル1を取得
89
+ ②ループ2周目:ファイル2を取得してファイル1に結合 ⇒結合ファイルを作成する
90
+ ③ループ3周目以降:ファイル3を取得して前回の結合ファイルに結合 ⇒結合ファイルが更新される
91
+ というように1ファイル目・2ファイル目と3ファイル目以降でPDF取得処理を分岐してあげることで実現できそうな気がします。
92
+ (PDF加工の部分がブラックボックスなので断言はできませんが。)
93
+
94
+ 以下、修正したサンプルです。
78
- ```
95
+ ```
96
+ Sub test2()
97
+ 'Excelを起動する
98
+ Set app = CreateObject("Excel.Application")
99
+
100
+ 'abc.xlsを開く
101
+ Dim book As Excel.Workbook
102
+ Set book = app.Workbooks.Open("C:\Users\9A150\Desktop\PDF化\PDF一覧.xlsx")
103
+
104
+ 'ファイル名一覧シートを指定
105
+ Dim sht As Excel.Worksheet
106
+ Set sht = book.Sheets("Sheet1")
107
+
108
+ Dim AddCnt As Integer
109
+ AddCnt = 0
110
+
111
+ For r = 2 To sht.Cells(sht.Rows.Count, "A").End(xlUp).Row '行を2から最終行まで
112
+
113
+ If sht.Cells(r, "A").Value <> "" Then 'A列注目行の値が""でなければ
114
+
115
+ 'C列からファイル名を取得する
116
+ mypdf = sht.Cells(r, "C").Value
117
+
118
+ ChDir ThisDocument.Path 'Wordファイルと同じフォルダ
119
+
120
+ If mypdf <> "" Then
121
+ Documents.Open FileName:=mypdf
122
+ 'カウンタ+1
123
+ AddCnt = AddCnt + 1
124
+
125
+ If AddCnt = 1 Then
126
+ '1ファイル目の場合
127
+ ' PDFファイルを読み込んでハンドルを取得する
128
+ p1 = MakeTemp(mypdf)
129
+ ElseIf AddCnt = 2 Then
130
+ '2ファイル目の場合
131
+ ' PDFファイルを読み込んでハンドルを取得する
132
+ p2 = MakeTemp(mypdf)
133
+ ' PDFファイルを結合する
134
+ Result = CombinePDF(p1, p2, SaveFileName)
135
+ ' 結合したPDFファイルのハンドルを解放する
136
+ FreePDF (p1)
137
+ FreePDF (p2)
138
+
139
+ '次回のベースファイルとして結果PDFをオープン
140
+ p1 = MakeTemp(SaveFileName)
141
+
142
+ Else
143
+ '3ファイル目以降の場合
144
+ ' PDFファイルを読み込んでハンドルを取得する
145
+ p2 = MakeTemp(mypdf)
146
+ ' PDFファイルを結合する
147
+ Result = CombinePDF(p1, p2, SaveFileName)
148
+ ' 結合したPDFファイルのハンドルを解放する
149
+ FreePDF (p2)
150
+
151
+ End If
152
+
153
+ End If
154
+ End If
155
+ Next
156
+ ' 結果PDFファイルのハンドルを解放する
157
+ FreePDF (p1)
158
+
159
+ 'ブックを閉じる
160
+ book.Close
161
+
162
+ End Sub
163
+
164
+ 'tmp作成~PDF読込
165
+ Function MakeTemp(ByVal vsPDF As String) As Long
166
+
167
+ Dim p As Long
168
+ p = 0
169
+
170
+ ' 拡張子をtmpに変換する
171
+ tmp = Replace(vsPDF, ".pdf", ".tmp", Compare:=vbTextCompare)
172
+
173
+ ' 元のPDFファイルをコピーしてバージョンを1.4形式に変更する
174
+ Call ChangePDFVersion(vsPDF, tmp)
175
+
176
+ ' PDFファイルを読み込んでハンドルを取得する
177
+ p = LoadPDF(tmp)
178
+
179
+ MakeTemp = p
180
+
181
+ End Function
182
+ ```
183
+ ※tmpの作成~PDF読込の部分は、複数個所で繰り返し使用しているため関数にしました。