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

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

ただいまの
回答率

89.86%

PDFファイルを結合したい(JustPDF)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 740

sedfjkhlaQ

score 7

前提・実現したいこと

プログラミング初心者です。質問に誤り・不足等あればご指摘ください。

PDFファイルをVBAで結合したいと考えています。インストールされているソフトはJustPDFです。
結合までの手順は以下のとおりです。

(前提)
「サンプル」というフォルダに次のようなファイル名のPDFファイルが複数格納されている
・サンプルA_○○(例 サンプルA_りんご、サンプルA_みかん…)
・サンプルB_○○(例 サンプルB_りんご、サンプルB_みかん…)
ただし、「サンプル」フォルダの格納場所は任意
・VBAを入れているExcel(「差込み」シート)に「○○」に該当する部分のリストが入力してあり、結合したい名前の隣の列に「1」が入力してある

①「サンプル」フォルダのファイルパスを取得する
②結合したファイルを格納するフォルダのファイルパスを取得する
③「サンプル」フォルダ内から「○○」部分の一致しているPDFを探し、結合、②で指定したフォルダに結合結果を保存する
(例 サンプルA_りんご、サンプルB_りんご → サンプル_りんご)

ExcelのVBAで作成しようとしていましたが、Excelでなくとも構いません。改善点、そもそも根本的に間違っているようであれば
実現するためのアドバイス等ご教示ください。
知識・理解が全く足りていないことは自覚しています。ご容赦ください。

(追記)
コードを実行すると、エラーは出ませんが結合もされることなく終了してしまいます。
myShell.Run (strCmd) のところで一瞬だけ黒いウィンドウが表示されるので何かが実行されているのだとは思うのですが…

試したこと

以下に、試行錯誤の結果を記載しておきます(あれこれ調べながら作るうちにわけのわからなくなったもので、使っていない変数の宣言などが残っていますが…)。
コマンドラインを呼び出して実行する、という方向で試してみていました。
VBAを実行したところ、エラーは出ませんでしたが、PDFの結合は実行されませんでした。

Option Explicit

Sub サンプルAとサンプルBを結合()

'Application.ScreenUpdating = False

    '結合する
    Dim StrScr          As Boolean
    Dim strCmd          As String
    Dim strWorkFolder   As String
    Dim IErrCount       As Long
    Dim IErrCode(4)     As Long
    Dim strOutFile(1)   As String
    Dim strErr          As String
    Dim IRetCode        As Long
    StrScr = RunCommandLineEX(strCmd, strWorkFolder, IErrCount, _
        IErrCode, strOutFile, strErr, IRetCode)

'Application.ScreenUpdating = true

End Sub

Public Function RunCommandLineEX( _
    ByVal strincommand As String, _
    ByVal strInWorkFolder As String, _
    ByVal IInErrCount As Long, _
    ByRef IInErrCode() As Long, _
    ByRef strOutFile() As String, _
    ByRef strOutErrMsg As String, _
    ByRef IOutRetCode As Long) As Boolean

'◆―◆―◆―◆―◆―◆―◆―◆―◆―◆―◆―◆
'サンプルAとサンプルBを格納してあるフォルダを選択する
Dim dlg As FileDialog
Dim fp As String

Set dlg = Application.FileDialog(msoFileDialogFolderPicker)

    If dlg.Show = False Then
        Exit Function
    End If

    fp = dlg.SelectedItems(1) & "\"

'◆―◆―◆―◆―◆―◆―◆―◆―◆―◆―◆―◆
'保存先を選択する
Dim dlg2 As FileDialog
Dim fp2 As String

Set dlg2 = Application.FileDialog(msoFileDialogFolderPicker)

    If dlg2.Show = False Then
        Exit Function
    End If

    fp2 = dlg.SelectedItems(1) '& "\"

'◆―◆―◆―◆―◆―◆―◆―◆―◆―◆―◆―◆
'Excelの設定
Dim LastRow, i As Long
Dim str, str2 As String
Dim SK As Worksheet
Set SK = ThisWorkbook.Worksheets("差込み")
LastRow = SK.Cells(Rows.Count, "D").End(xlUp).Row 'フィルター列

For i = 2 To LastRow
If SK.Range("D" & i).Value <> "" Then
    str = "サンプルA_" & SK.Range("B" & i).Value   'ファイル名
    str2 = "サンプルB_" & SK.Range("B" & i).Value   'ファイル名

    '◆―◆―◆―◆―◆―◆―◆―◆―◆―◆―◆―◆
    '結合するファイルを変数に格納する
    'サンプルAを変数に格納する
    Dim KT As String
    If Dir(fp & str & ".pdf") <> "" Then
        KT = fp & str & ".pdf"
    Else
        MsgBox (fp & str & ".pdf" & "が見つかりませんでした。")
        Exit Function
    End If

    'サンプルBを変数に格納する
    Dim KB As String
    If Dir(fp & str2 & ".pdf") <> "" Then
        KB = fp & str2 & ".pdf"
    Else
        MsgBox (fp & str2 & ".pdf" & "が見つかりませんでした。")
        Exit Function
    End If


'引数で使う変数
Dim StrScr          As Boolean
Dim strCmd          As String
Dim strWorkFolder   As String
Dim IErrCount       As Long
Dim IErrCode(4)     As Long
'Dim strOutFile(1)   As String
Dim strErr          As String
Dim IRetCode        As Long

strCmd = "cmd /c PdfCmdCreator.exe /combine " & Chr(34) & KT & Chr(34) & Chr(32) & Chr(34) & KB & Chr(34) & " /out " & Chr(34) & fp2 & Chr(34)

Dim myShell As Object
Set myShell = CreateObject("WScript.Shell")
myShell.Run (strCmd) '実行

End If
Next

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sedfjkhlaQ

    2019/07/24 21:57

    フルパスで記述してみましたが、まだ何も起こりませんでした…

    strCmd = "cmd /C:\Program Files (x86)\JustSystems\JustPdf3\Creator\PdfCmdCreator.exe /combine " & Chr(34) & KT & Chr(34) & Chr(32) & Chr(34) & KB & Chr(34) & " /out " & Chr(34) & fp2 & Chr(34)

    他に何か、環境設定が必要だったりするのでしょうか。

    キャンセル

  • sage

    2019/07/25 13:41

    「Program Files (x86)」中に空白文字があります。strCmdに代入する時の「"」はついていますが、コマンドを実行する時には「"」がないので動かないのでは?
    それから、「cmd」への1つ目のオペランド(オプション)が「/c」で2つ目がフルバスでのコマンドです。上だと1つ目と2つ目がつながり、かつ「c」が1つ抜けています。

    キャンセル

  • sedfjkhlaQ

    2019/07/25 22:48

    できました!

    オペランド…知りませんでした。
    ということで、「/k」にしてみてみたところ、cmdを開いてもパスが「C:\Program」で切れてしまっているようでした。そこで、下のように記述したところできました!

    myShell.Run "cmd.exe /c cd C:\Program Files (x86)\JustSystems\JustPdf3\Creator" & "&" & "start PdfCmdCreator.exe /combine " & Chr(34) & KT & Chr(34) & Chr(32) & Chr(34) & KB & Chr(34) & " /out " & Chr(34) & fp2 & Chr(34)

    ご指摘いただいたとおり「/c」にしまして、カレントディレクトリをPdfCmdCreator.exeのある階層に変更して、コマンドの連続実行でPdfCmdCreator.exeを実行すると、できました。(「Program Files (x86)」中に空白文字があるのは、大丈夫みたいです)
    長くなってしまっているところは、この後、調整していきたいと思います。
    ありがとうございました!

    キャンセル

回答 1

checkベストアンサー

0

結合する1個目のファイル名の最後の「"」と2個目のファイル名の前の「"」の間に空白がなく、「"」が連続しています。間に空白[Chr(32)]を挟んでください。

Chr(34) & KT & Chr(34) & Chr(34) & KB & Chr(34)


Chr(34) & KT & Chr(34) & Chr(32) & Chr(34) & KB & Chr(34)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/23 20:08

    ご回答ありがとうございます。ご指摘の通り修正してみました。ですが、何も起こりませんでした…
    エラーは出ませんが、結合も実行されません。一瞬だけ黒いウィンドウが開くので、何かしらの実行はされていると思うのですが、PDFの結合まで行かないようです。
    PdfCmeCreator.exeは開くけれど、コマンドが正しく入力されていない、ということなのでしょうか。

    キャンセル

  • 2019/07/23 20:33

    もしかしたらこの環境ではパスが通っていないのかもしれません。PdfCmdCreator.exeをフルパスで記述してみてください。

    キャンセル

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

  • ただいまの回答率 89.86%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る