回答編集履歴

1

追記

2017/06/07 08:14

投稿

jawa
jawa

スコア3013

test CHANGED
@@ -148,8 +148,218 @@
148
148
 
149
149
  End Sub
150
150
 
151
-
152
-
153
-
154
-
155
151
  ```
152
+
153
+
154
+
155
+ コメントを受けて追記
156
+
157
+ ---
158
+
159
+
160
+
161
+ やりたいこととしては、
162
+
163
+ ①ファイル1を取得
164
+
165
+ ②ファイル2を取得してファイル1に結合 ⇒結合ファイルが作成される
166
+
167
+ ③ファイル3を取得して前回の結合ファイルに結合 ⇒結合ファイルが更新される
168
+
169
+ というかんじであっていますでしょうか?
170
+
171
+
172
+
173
+ 上記であれば、プログラムでも
174
+
175
+ ①ループ1周目:ファイル1を取得
176
+
177
+ ②ループ2周目:ファイル2を取得してファイル1に結合 ⇒結合ファイルを作成する
178
+
179
+ ③ループ3周目以降:ファイル3を取得して前回の結合ファイルに結合 ⇒結合ファイルが更新される
180
+
181
+ というように1ファイル目・2ファイル目と3ファイル目以降でPDF取得処理を分岐してあげることで実現できそうな気がします。
182
+
183
+ (PDF加工の部分がブラックボックスなので断言はできませんが。)
184
+
185
+
186
+
187
+ 以下、修正したサンプルです。
188
+
189
+ ```
190
+
191
+ Sub test2()
192
+
193
+ 'Excelを起動する
194
+
195
+ Set app = CreateObject("Excel.Application")
196
+
197
+
198
+
199
+ 'abc.xlsを開く
200
+
201
+ Dim book As Excel.Workbook
202
+
203
+ Set book = app.Workbooks.Open("C:\Users\9A150\Desktop\PDF化\PDF一覧.xlsx")
204
+
205
+
206
+
207
+ 'ファイル名一覧シートを指定
208
+
209
+ Dim sht As Excel.Worksheet
210
+
211
+ Set sht = book.Sheets("Sheet1")
212
+
213
+
214
+
215
+ Dim AddCnt As Integer
216
+
217
+ AddCnt = 0
218
+
219
+
220
+
221
+ For r = 2 To sht.Cells(sht.Rows.Count, "A").End(xlUp).Row '行を2から最終行まで
222
+
223
+
224
+
225
+ If sht.Cells(r, "A").Value <> "" Then 'A列注目行の値が""でなければ
226
+
227
+
228
+
229
+ 'C列からファイル名を取得する
230
+
231
+ mypdf = sht.Cells(r, "C").Value
232
+
233
+
234
+
235
+ ChDir ThisDocument.Path 'Wordファイルと同じフォルダ
236
+
237
+
238
+
239
+ If mypdf <> "" Then
240
+
241
+ Documents.Open FileName:=mypdf
242
+
243
+ 'カウンタ+1
244
+
245
+ AddCnt = AddCnt + 1
246
+
247
+
248
+
249
+ If AddCnt = 1 Then
250
+
251
+ '1ファイル目の場合
252
+
253
+ ' PDFファイルを読み込んでハンドルを取得する
254
+
255
+ p1 = MakeTemp(mypdf)
256
+
257
+ ElseIf AddCnt = 2 Then
258
+
259
+ '2ファイル目の場合
260
+
261
+ ' PDFファイルを読み込んでハンドルを取得する
262
+
263
+ p2 = MakeTemp(mypdf)
264
+
265
+ ' PDFファイルを結合する
266
+
267
+ Result = CombinePDF(p1, p2, SaveFileName)
268
+
269
+ ' 結合したPDFファイルのハンドルを解放する
270
+
271
+ FreePDF (p1)
272
+
273
+ FreePDF (p2)
274
+
275
+
276
+
277
+ '次回のベースファイルとして結果PDFをオープン
278
+
279
+ p1 = MakeTemp(SaveFileName)
280
+
281
+
282
+
283
+ Else
284
+
285
+ '3ファイル目以降の場合
286
+
287
+ ' PDFファイルを読み込んでハンドルを取得する
288
+
289
+ p2 = MakeTemp(mypdf)
290
+
291
+ ' PDFファイルを結合する
292
+
293
+ Result = CombinePDF(p1, p2, SaveFileName)
294
+
295
+ ' 結合したPDFファイルのハンドルを解放する
296
+
297
+ FreePDF (p2)
298
+
299
+
300
+
301
+ End If
302
+
303
+
304
+
305
+ End If
306
+
307
+ End If
308
+
309
+ Next
310
+
311
+ ' 結果PDFファイルのハンドルを解放する
312
+
313
+ FreePDF (p1)
314
+
315
+
316
+
317
+ 'ブックを閉じる
318
+
319
+ book.Close
320
+
321
+
322
+
323
+ End Sub
324
+
325
+
326
+
327
+ 'tmp作成~PDF読込
328
+
329
+ Function MakeTemp(ByVal vsPDF As String) As Long
330
+
331
+
332
+
333
+ Dim p As Long
334
+
335
+ p = 0
336
+
337
+
338
+
339
+ ' 拡張子をtmpに変換する
340
+
341
+ tmp = Replace(vsPDF, ".pdf", ".tmp", Compare:=vbTextCompare)
342
+
343
+
344
+
345
+ ' 元のPDFファイルをコピーしてバージョンを1.4形式に変更する
346
+
347
+ Call ChangePDFVersion(vsPDF, tmp)
348
+
349
+
350
+
351
+ ' PDFファイルを読み込んでハンドルを取得する
352
+
353
+ p = LoadPDF(tmp)
354
+
355
+
356
+
357
+ MakeTemp = p
358
+
359
+
360
+
361
+ End Function
362
+
363
+ ```
364
+
365
+ ※tmpの作成~PDF読込の部分は、複数個所で繰り返し使用しているため関数にしました。