Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Professional : Excel 2013)
VBAでPDFに飛びワンクリック印刷
投稿日時: 18/04/19 23:23:58
投稿者: marusu77

 
VBAでPDFに飛びワンクリック印刷したいのですがうまくいきません。
どのようにマクロを組めばいいのでしょうか?

回答
投稿日時: 18/04/20 10:40:28
投稿者: mattuwan44

>VBAでPDFに飛び
 
シート上にPDFファイルのパスが記録されており、
それを選択したら該当するPDFファイルを印刷したいということですか?

投稿日時: 18/04/21 06:18:33
投稿者: marusu77

回答ありがとうございます。
説明足らずですみません。VBA活用して間もなく、探り探りやっている感じです。
下記のように2パターン作成しましたがうまくいきません。
パターン1はエクセルにハイパーリンクから飛んでPDFを印刷できたらいいと設定しましたが
PDFではなくエクセルが印刷されてしまいます。
パターン2はネットを参考にしました。
簡単に設定できる方法ありましたら教えてください。
 
 
パターン1
Sub 印刷飛ぶ()
'
' 印刷飛ぶ Macro
'
   Range("D5").Select
   Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
End Sub
Sub 印刷一括()
'
' 印刷一括 Macro
'
 
'
   Range("D5").Select
   Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
   ActiveWindow.SmallScroll Down:=0
   ActiveWindow.PrintOut Copies:=Sheets("Sheet1").Range("C5").Value
End Sub
 
 
 
パターン2
Option Explicit
 
Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hwnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As Long
 
Public Sub PrintPDF()
 Dim strPath As String
 
 strPath = Range("2A1.PDF").Value
 ' 現在の位置とサイズで表示 5(SW_SHOW)
 Call ShellExecute(Application.hwnd, "open", strPath, vbNullString, vbNullString, 5)
 ' 印刷
  Call ShellExecute(Application.hwnd, "print", strPath, vbNullString, vbNullString, 5)
End Sub
 
 
Private Sub PrintPDF_Click()
On Error GoTo Err:
    Dim dRet As Double '戻り値
   'PDFファイルを画面表示する
   dRet = AdobeReader.OpenPdf(FilePath:="2A1.PDF")
    'Excelを最前列に表示
   AppActivate Application.Caption
    If dRet = 0 Then
        'OpenPdf関数でエラー発生
       MsgBox "OpenPdfでシステムエラーが発生しました" & vbCrLf & _
            "システム担当者へ連絡してください。", vbOKOnly + _
            vbCritical + vbApplicationModal, "システムエラー"
    Else
        '正常終了
       MsgBox "OKです", vbOKOnly, "正常終了"
    End If
    Exit Sub
 
Err:
    Dim strMsg As String
    strMsg = "以下の内容をシステム担当者へ連絡してください。" & _
        vbCrLf & "エラー番号:" & Err.Number & _
        vbCrLf & "エラー内容:" & Err.Description
    'エラーのメッセージボックスを表示
   MsgBox strMsg, vbOKOnly + vbCritical + vbApplicationModal, "システムエラー"
End Sub

回答
投稿日時: 18/04/21 08:04:47
投稿者: simple

Acrobat(Acrobat Readerも)は,
起動オプション /t をつけて、PDFのフルパスを渡せば印刷ができるようです。
トライしてみてはいかがでしょうか。

回答
投稿日時: 18/04/21 10:21:01
投稿者: mattuwan44

>パターン1はエクセルにハイパーリンクから飛んでPDFを印刷できたらいいと設定しましたが
なるほど、
んと、考え方としては、
 
1)
セルのハイパーリンクの設定情報の中から、
ファイルのフルパスの情報を取得する。
2)
そのファイルをアクロバットで開いて印刷する
 
という流れになるのかなと思います。
 
印刷はこの辺が参考になりませんかね?
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11168109181
http://www.isa-school.net/map/funabashi/2009/05/20/フォルダ内のpdfファイルを一括印刷【vba】/
http://tesco7.blogspot.jp/2011/02/vbapdf.html

投稿日時: 18/04/21 15:01:26
投稿者: marusu77

ありがとうございます。
 
/tをつけるということですが
どこにつければいいのでしょうか?
素人ですみません。
教えてください。
 
 

回答
投稿日時: 18/04/21 18:18:59
投稿者: WinArrow
投稿者のウェブサイトに移動

marusu77 さんの引用:
ありがとうございます。
 
/tをつけるということですが
どこにつければいいのでしょうか?
素人ですみません。
教えてください。
 
 

 
mattuwan44さん紹介のページは、見ましたか?

回答
投稿日時: 18/04/21 23:03:54
投稿者: MMYS

marusu77 さんの引用:

/tをつけるということですが
どこにつければいいのでしょうか?

コマンドプロンプトから「AcroRd32.exe」
を実行する方法はご存知ですか
  
理解している場合、以下をご覧下さい。
https://helpx.adobe.com/jp/acrobat/kb/510705.html
http://holmes.hatenablog.com/entry/2014/04/10/092532
 
後はVBAで、コマンドプロンプトの手順を再現するだけです。
  
なお、意味が理解出来ない場合、実力以上のことを
求めているのでおすすめしません。
 
 

回答
投稿日時: 18/04/22 10:58:09
投稿者: ちゃこ

いきなり印刷すればよいなら「パターン2」の
Option Explicit
  
Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hwnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As Long
   
Public Sub PrintPDF()
    Dim strPath As String
    strPath = ThisWorkbook.Path & "\" & Sheets("Sheet1").Range("C5").Value
    ' 印刷
    Call ShellExecute(Application.hwnd, "print", strPath, vbNullString, vbNullString, 5)
End Sub
 
これだけで良さそうですが……
フルパスがSheets("Sheet1").Range("C5")にあるのかどうか不明なので
ThisWorkbook.Path を頭に付けましたが
 
違ってたらごめん (^^♪

トピックに返信