[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『個別ハイパーリンクの一括ダウンロード』(とろろ)
winXP/Excel2000使用
Excelで製品別図面番号一覧表を作成しています。 製品毎に図面番号1〜10まであり、それぞれにハイパーリンクを設定し 図面番号1をクリックすれば、図面1のPDFファイルが開くようになっています。
できたらの話なのですが。
A B C ・・・ J K 製品名 │ 図面1 │ 図面2 │・・・│図面10│
右端の空白セルにでも「一括ダウンロード」というボタンを付け クリックすると、図面1〜10までの10個のPDFファイルを 10ページの1ファイルとして、デスクトップにでも保存してくれる ようには、できないでしょうか?
こんにちは。かみちゃん です。
> 図面1のPDFファイル
これは、どこに保存しているのですか? (1) ローカルディスク、(2) ファイルサーバー、(3) インターネット(イントラネット)のどれですか?
(1)(2)であれば、ファイルのコピーでできると思うのですが、 (3)は、URLDownloadToFile を使うことでできるような気がします。 http://www.ken3.org/vba/backno/vba120.html
(かみちゃん) 2009-06-03 22:30
かみちゃんさん。早速ありがとうございます。 ファイルの保存場所は、ファイルサーバーです。 「10個のファイルを1つのファイルにして保存」なんてこと、できるんでしょうか?
こんにちは。かみちゃん です。
> デスクトップにでも保存してくれる
VBAで処理する前提ですが、 デスクトップのパス名は、以下のように取得することになるかと思います。 (OSによっては、PC、ログインユーザー名ごとに違う場合があるため)
Sub Test() Dim strPath As String strPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") MsgBox "デスクトップのパス" & vbCrLf & strPath End Sub
> ファイルの保存場所は、ファイルサーバーです。
環境が手元にないので、検証確認できませんが、FileCopy でできるのではないかと思います。 ただし、ファイルサーバーへのアクセス権限は、許可されているものとします。
> 「10個のファイルを1つのファイルにして保存」
PDFの再作成ということでしょうか? その方法を知らないのですが、そのようにしたい理由は何でしょうか? 1つのフォルダに入れたり、1つの圧縮ファイルにしたりするということではいけないのでしょうか?
(かみちゃん) 2009-06-03 22:45
>「10個のファイルを1つのファイルにして保存」 って、「10ページある1つのPDFファイルにして保存」って事ですよね?
エクセルでは無理だと思いますが。。。。
先にそのようなファイルを作成しておいて 「一括ダウンロード」というボタンで デスクトップにコピーを作成する 程度なら可能だと思います。
(HANA)
>そのようにしたい理由は何でしょうか?
ハイパーリンク先の図面を印刷する必要があるのですが 図面番号を1〜10までクリックし、立ち上がったPDFファイルをそれぞれ印刷する 方法より、既に10ページになっているファイルを1回印刷するだけのほうが 簡単かな、と思ったのです。 製品は3000近くあり、図面の改版も度々行われるので、最初から10ページにした PDFファイルを作ると後のメンテナンスが大変そうです。
うまく説明できなくて、申し訳ないのですが・・・。
・・・と書いている間にHANAさんからコメントいただきました。 エクセルでは、無理ですか。そうですね。欲張っちゃいけませんね ^_^; 10ページのファイルを作成する方法も考えたのですが、なにしろ製品数が多く 個々の図面の変更も度々あるものですから、なにか良い手はないかと。
もし良いアイデアがありましたら、ご教示いただけると有り難いです。
こんにちは。かみちゃん です。
> ハイパーリンク先の図面を印刷する必要があるのですが > 図面番号を1〜10までクリックし、立ち上がったPDFファイルをそれぞれ印刷する
指定されたPDFファイルが印刷できればいいわけですね。 検証はできていませんが、以下のような感じなどで、PDFファイルの一括印刷ができるような気がします。 (1回のボタンクリックで、1ファイルずつ印刷を10ファイル分繰り返し処理するという考え方にします) http://scripting.cocolog-nifty.com/blog/2007/07/pdf_d572.html
明日以降、職場で複数のPDFファイルの印刷検証をしてみようと思います。 (今まで私も1ファイルずつ印刷していました)
(かみちゃん) 2009-06-03 23:26
印刷するだけが目的なら、こちらの過去ログも参考になりそうです。 [[20090207114523]]『インターネットエクスプローラーでPDFを印刷』(ビ〜ノ)
(HANA)
かみちゃんさん*** リンク貼っていただいた内容見ましたが、全然理解ができませんでした (´・ω・|||)
(今まで私も1ファイルずつ印刷していました) ←聞いて改めて 素人の自分がいかに 無謀なことをしようとしているか感じました。お手数掛けてすみません。
検証結果をお知らせいただけると嬉しいです。 よろしくお願いします。
HANAさん*** 参考過去ログ、ありがとうございます。 じっくり確認して、試してみます。
こんなページがありました。 http://www.isa-school.net/map/funabashi/2009/05/20/%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E5%86%85%E3%81%AEpdf%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%B8%80%E6%8B%AC%E5%8D%B0%E5%88%B7%E3%80%90vba%E3%80%91/
フォルダを作成し、必要なファイルをコピーした後 上記コードを実行し印刷。その後、複製したファイルをフォルダ毎削除
なんて流れにしたら出来るかもしれませんね。
或いは、手作業になりますが ファイルを複数選択して右クリック→印刷 でも、一括印刷は出来るかもしれません。
ファイルがまとまっていないなら、まとめる作業くらいは エクセルにやらせても良いと思います。
(HANA) ...よく見るとリンク先のページのコードは 一旦フォルダにまとめなくても、変数に情報を入れたら コードの下側から実行すれば良さそうですね。 Excel と Adobe Acrobatのバージョンに、左右されるかもしれませんが。
(HANA)
拡張子は違いますがまとめて印刷という質問内容はこれに似ているのではと? [[20081023153339]]『エクセルで一覧にしたxdwファイルを印刷』(えびあん) (とおりすがり)
HANAさん、とおりすがりさん。ありがとうございます。 ファイルの保存場所はまとまっていません。。。 どの製品にどの図面(PDF)ファイルが必要なのかは、最初に記した エクセルの一覧表でわかります。ハイパーリンクが設定されているので フォルダのパスもわかります。 希望としては、エクセルで同列にあるハイパーリンクされたPDFを 一括印刷してくれるボタンを1行目から3000行目まで設置したいと思います。
余談ですが、これまで一人の作業者が、依頼を受けて印刷していた作業を 依頼者側でやってもらおうと企んでいるのです。 依頼者の中にはパソコンが苦手という人もいるので、エクセルの一覧表を 開いた後に複雑な手作業を組み込むと、クレームがおきそうです。
HANAさん提案の方法だったら、ユーザーはワンクリックで済みそうなので 希望通りになりそうです。 もしお時間ありましたら、こんな感じじゃない?というコードを書いて いただけると、とても助かります。
こんにちは。かみちゃん です。
> 検証結果をお知らせいただけると嬉しいです。
いろいろと検証していたら、環境によってはうまくいかない場合があるようで、ようやく、私の環境 では動作確認ができたので、ご紹介させていただきます。
私の環境 Windows XP Pro SP2 + Excel 2002 SP3 + Adobe Reader 7.0
前提条件 アクティブシートのB1:K1に印刷したいPDFファイルのフルパスが記述されている。
Sub Sample() Dim pdffiles() As String Dim intcount As Integer Dim c As Range Dim i As Integer Dim l As Long
ReDim pdffiles(10) For Each c In Range("B1:K1") strFileName = c.Value If Dir(strFileName) <> "" Then If Right(strFileName, 3) = "pdf" Then pdffiles(intcount) = strFileName intcount = intcount + 1 End If End If Next If intcount = 0 Then MsgBox "印刷対象ファイルがありません" Exit Sub End If ReDim Preserve pdffiles(intcount)
'PDF一括印刷部分 'Adobe Reader 7.0 で確認 CreateObject("WScript.Shell").Run "AcroRd32.exe" Application.DisplayAlerts = False On Error Resume Next Do DoEvents Err.Clear l = DDEInitiate("Acroview", "Control") Loop While Err.Number <> 0 On Error GoTo 0 Application.DisplayAlerts = True
For i = 0 To intcount - 1 DDEExecute l, "[FilePrintSilent(""" & pdffiles(i) & """)]""" Next DDEExecute l, "[AppExit()]" DDETerminate l
MsgBox "PDFファイルの一括印刷を終了しました" End Sub
初めて書いたコードなので、考え方、スマートさは、あまりよろしくないかもしれません。 ただ、何かの参考になればうれしいです。 私も、自分の仕事で大量のPDFファイルを印刷することがあるので、このコードで効率よくできるようです。
なお、検証中に調べていて、参考にしたURLをご紹介します。 Acrobat Pro がないためのエラーなどが起こることがあるようです。 http://pdf-file.jugem.jp/?eid=18 http://pdf-file.jugem.jp/?eid=93
(かみちゃん) 2009-06-06 12:47
かみちゃんさん。
検証結果ご紹介いただき、ありがとうございます。 また、ご丁寧なコード記述までいただき、感激です!! 早速、来週の月曜にでも会社で動作確認してみます。 (不景気のため、本日会社休業−レイオフというやつです) 仕事で使っている環境は、WinXP,Excel2000,Acrobat6.0です。
じつは今日、VBA入門の書籍を購入しました。 本を開きながら、書いていただいたコードの内容を理解したいと思います。
結果をまたご報告します。 ありがとうございました。
あらら、このタイミングで。(笑)
こんな感じで作ってみました。
ボタンを配置する予定の様ですが、それはやめて SelectionChangeイベントを使用します。 ボタン替わりに、該当セルに 1. =HYPERLINK("#"&CELL("ADDRESS"),"一括印刷") の式を埋め込む。 2.セルの色を「薄い水色」に変更。
ハイパーリンクは、どこかへ移動するためではなく ポインタが対象セルの上にある時に、形を変える為です。 また、セルの色は単に私の好みです。
A列に図面名、B列から各図面へのハイパーリンクが設定してあり 一番最後の列に、1 の式を入れて下さい。
シートの準備が出来たら、このシートのシートモジュールに '------ Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim tic As Long, tf As String Dim hrng As Range, fpa, pc As Long, efn As String With Target If .Count > 1 Then Exit Sub If .Value <> "一括印刷" Then Exit Sub If Cells(.Row, 1).Value = "" Then Exit Sub If MsgBox(Cells(.Row, 1).Value & " を一括印刷しますか?", vbYesNo) = vbNo Then Exit Sub End If On Error GoTo err Application.EnableEvents = False Set hrng = Range(Cells(.Row, 2), Cells(.Row, .Column - 1)) tr = .Formula tic = .Interior.ColorIndex
.Value = "印刷処理中" .Interior.ColorIndex = 6 DoEvents Call get_fpa(hrng, fpa, pc) Call pdf_print(fpa, pc, efn) err: If err <> 0 Then MsgBox "エラーが発生しました。" & vbCrLf & "処理を終了します。" Else If efn = "" Then MsgBox "印刷が終了しました。" Else MsgBox "印刷が終了しました。" & vbCrLf & vbCrLf & _ "以下の印刷に失敗しました。" & vbCrLf & efn End If End If .Formula = tr .Interior.ColorIndex = tic Application.EnableEvents = True End With End Sub '------
標準モジュールに '------ Sub get_fpa(hrng, fpa, pc) Dim mrng As Range, i As Long ReDim fpa(hrng.Count, 1) For Each mrng In hrng If mrng.Hyperlinks.Count > 0 Then fpa(pc, 0) = mrng.Hyperlinks(1).Address fpa(pc, 1) = mrng.Value pc = pc + 1 End If Next End Sub Sub pdf_print(fpa, pc, efn) Dim AcroPDDoc As Object, AcroAvDoc As Object Dim buf As Long, epb As Long, i As Long Set AcroPDDoc = CreateObject("AcroExch.PDDoc") Set AcroAvDoc = CreateObject("AcroExch.AVDoc") For i = 0 To pc If fpa(i, 0) <> "" Then If LCase(Right(fpa(i, 0), 3)) <> "pdf" Then efn = efn & vbCrLf & fpa(i, 1) Else If Dir(fpa(i, 0)) = "" Then efn = efn & vbCrLf & fpa(i, 1) Else buf = AcroAvDoc.Open(fpa(i, 0), "") If buf <> -1 Then efn = efn & vbCrLf & fpa(i, 1) Else Set AcroPDDoc = AcroAvDoc.GetPDDoc() epb = AcroPDDoc.GetNumPages buf = AcroAvDoc.PrintPages(0, epb - 1, 2, 0, 0) If buf <> -1 Then efn = efn & vbCrLf & fpa(i, 1) End If End If buf = AcroAvDoc.Close(False) End If End If End If Next Set AcroPDDoc = Nothing Set AcroAvDoc = Nothing End Sub '------
A列に入力がある行 ハイパーリンクが設定されているデータが対象です。
そのシート内で、1の式を入れたセル以外で 「一括印刷」の文字を使わないで下さい。 (そのセルを選択した時に、マクロが実行されて仕舞いますので。)
(HANA)
こんにちは。かみちゃん です。
To, HANAさん
横から、申し訳ありませんが、一点だけ確認させていただけませんか?
> Set AcroPDDoc = CreateObject("AcroExch.PDDoc")
この記述ですと、私のAdobe Reader 7.0 では、 http://pdf-file.jugem.jp/?eid=18 で紹介されている 「ActiveXコンポーネントは、オブジェクトを作成できません」 というエラーになります。 参照設定で「Adobe Acrobat 7.0 Type Library」にチェックしてあります。
質問者のとろろさんから
> 仕事で使っている環境は、WinXP,Excel2000,Acrobat6.0です。
とあったので、環境の違いなのかもしれませんが、お手数でなければ、HANAさんの環境(特にAcrobatのバージョン) を教えていただけないでしょうか?
もし、Adobe Reader 7.0 で、動作しているならば、私の環境でなぜ動かないのかを調べてみようと思っています。 もちろん、わからないときは、別スレッド等で質問させていただくかもしれません。
まずは、どのような環境で動くのかを確認させていただければと思います。
(かみちゃん) 2009-06-06 17:01
私は「Adobe Reader 5.1」だと思います。 環境に依っては動かないかもしれませんね。
(HANA)
こんにちは。かみちゃん です。
To, HANAさん
早速、ありがとうございます。
> 私は「Adobe Reader 5.1」だと思います。 > 環境に依っては動かないかもしれませんね。
なるほど。。。 Adobe Reader 5.1 でしたら、動くということですか。 少なくともAdobe Reader 7.0 では、エラーになりましたので、一応、お知らせさせていただきます。
もしかして、Acrobat ≠ Adobe Reader ということなのかもしれませんね。 それであれば、納得できるのですが・・・
お忙しいところありがとうございます。 とろろさん、お邪魔しました。月曜日以降、確認結果のご連絡いただければうれしいです。
(かみちゃん) 2009-06-06 17:11
あらら?ごめんなさい。 使用しているのは 「Acrobat Reader 5.1」です だから、かみちゃんさんの「Adobe Reader」では駄目なのかな・・・?
ご紹介のリンク先では 上記のエラーメッセージは「Acrobatしか使えない。」 というエラーメッセージです。 と言う事で、とろろさんがお使いなのがAcrobatなので 大丈夫かもしれません。
Acrobat Reader には近寄らない事にしているので・・・ (起動に時間がかかるし、色々言われるし 使い方が良く分からないし。←これが一番。笑) どういった事なのか良く分かっていませんが。。。
って事で、再度・・・。 使用中のものは「Acrobat Reader 5.1」でした。 (これで、かみちゃんさんの疑問も解けるでしょうか。。。)
(HANA)
こんにちは。かみちゃん です。
To, HANAさん
> 疑問も解けるでしょうか
ありがとうございます。なんとか解けました。 Acrobat Reader ≠ Adobe Reader ということなのですね。 たぶん、私が大きな勘違いをしているようです。(新たな発見です)
To, とろろさん
私の環境では動いているのですが、もしかしたら、とろろさんの環境では動かないのかもしれませんね。 それであれば、誤ったコードを提示していることになりますので、先にお詫びさせていただきます。
お手数てすが、動かなかった場合でもその旨、教えていただければと思います。 代替案は環境がないので、提示することはできません。申し訳ありません。
(かみちゃん) 2009-06-06 17:37
こんにちは。かみちゃん です。
Excelに関係ない話になるので、恐縮ですが、
> Acrobat Reader ≠ Adobe Reader > ということなのですね。 > たぶん、私が大きな勘違いをしているようです。(新たな発見です)
少し何が違うのだろうと、調べてみたところ、どうやら 「Acrobat Reader」は、5.0までの呼び方、 「Adobe Reader」は、6.0以降の呼び方のようです。 http://ja.wikipedia.org/wiki/Portable_Document_Format
HAHAさんがおっしゃりたい違いとは、違うのかもしれませんが・・・ やはりバージョンが違うと、動くコードと動かないコードがあるのかもしれません。
よくわからないのですが、ややこしいですね。 でも、少し勉強になりました。
(かみちゃん) 2009-06-06 17:57
Acrobat Reader のみならず、Acrobat 自体が 良くわからないし、必要ないので 近寄らないことにしているのですが・・・。
おそらく、AcrobatReaderとAdobiReaderは バージョンの違いによる名前の様です。
かみちゃんさんご紹介のリンク先をたどると http://www.adobe.com/jp/support/downloads/acrwin.html のページへ行きつきます。 この書き方では、その様に推測も出来ると思います。
ちなみに、こちらは本家の 「Acrobat、Acrobat Elements 、Adobe Reader の違いは何ですか」 http://www.adobe.com/jp/support/kb/cs/3/cs_3610_ja-jp.html
ご紹介のリンク先では 1)AcrobatとAcriobat Readerの両方で使える。 2)Acrobatしか使えない。 と、AcrobatReaderの名前が使われていますが これは、AdobiReaderの事だと思います。 (Acrobatの方は、そのまま Acrobat)
そして、AcrobatReader5.1は少し違った位置づけなのかもしれません。 http://forums.adobe.com/thread/406119
(HANA)
こんにちは。かみちゃん です。
To, HANAさん
> Acrobat Reader のみならず、Acrobat 自体が > 良くわからないし、必要ないので > 近寄らないことにしているのですが・・・。
Excelに関係のない話で、近寄りたくない案件にもかかわらず、わざわざ調べていただいたようで、お忙しいところ恐縮です。
単純に、HANAさんが提示されたコードが、私の環境では動かなかったので、HANAさんの環境を知りたかっただけです。 Acrobat Reader 5.1 で動いて、その後継バージョン?と思われる Adobe Reader 7.0 では動かないこともあるようですね。
よって、質問者のとろろさんの環境では、特に、私が提示したコードが動かないことがあるかもしれません。 その際は、ぜひ事象を教えていただこうと思っています。
(かみちゃん) 2009-06-06 23:52
かみちゃんさん。HANAさん。 本当に色々、ありがとうございます。 昨夜から体調が悪く、PCを立ち上げていなかったのですが 今、ページを見て感謝感激と驚きに包まれています。。
お二人とも、お忙しいにも関わらず 素人のふとした思いつき(しかもかなり無謀な)に 懇切丁寧にお答えいただき、ありがとうございます。
疑問をとことん追求する、、コレ学びました。
私が使っているのは「Acrobat(Distiller)6.0」ですので お二人の環境とは違っていて、もしかしたら動作しない 可能性もあるわけですね。
月曜に確認し、もちろん結果ご報告します。
かみちゃんさん。HANAさん。 まずは、ありがとうございます。 どちらの方法でも、印刷成功しました。 但し、エクセル内ハイパーリンクの表示はフルパスであることが条件のようですね。 現在、ハイパーリンクの表示は「1AA-01234」のような図面番号にしているのですが そのままですと、印刷エラーになります。試しに、ハイパーリンクの表示をPDFファイルの 置き場所(\\ファイルサーバ\BBB\CCC\図面 1AA-01234)にすると、印刷できました。
これを、「1AA-01234」のような省略したハイパーリンクの表示でも 印刷が出来る方法は何かありますでしょうか? 他シートにフルパスを入れてジャンプさせるような方法になりますか?
ハイパーリンクが設定されているブックと 実際にファイルがある場所の関係は どの様になっていますか?
「ハイパーリンクの表示」と言うのは セルに入力されているデータ と言う事ですよね?
その文字に設定されているリンク先のアドレス ではなく。
(HANA)
HANAさん。早速のご回答ありがとうございます。
エクセルとPDFの保存場所は、それぞれファイルサーバが違います。
ネットワーク全体-----サーバ1---- │ │--フォルダ1---PDF保存場所 │ │-サーバ2 │ │-サ−バ3----- │--フォルダ1 │ │--フォルダ2---エクセル保存場所
上記のようなイメージです。(フォルダの階層等省略している部分あり)
サーバが別ということ、最初に記しておくべきでした。 申し訳ありません。
>「ハイパーリンクの表示」と言うのは セルに入力されているデータ と言う事ですよね?
そうです。セルに入力されているデータ(文字)です。
>その文字に設定されているリンク先のアドレス ではなく。
その通りです。リンク先のアドレスは「\\ファイルサーバ\BBB\CCC\図面 1AA-01234」で セルには「1AA-01234」と表示するようにしています。
私のコードでも >そのままですと、印刷エラーになります。 か?
もう一度確認して頂ければと思います。
因みに、かみちゃんさんのコードは その様にしないと駄目ですね。
(HANA)
HANAさん。 すみません。(謝) できました。。
原因は、ハイパーリンクのアドレスが「http://」で始まるWeb仕様(?)になっていたので ハイパーリンクの置換えで、「\\サーバ名\」という形式に変更しました。 その際、頭に「file://」とついてしまったのがいけなかったようです。 再度置換えで「file://」を取ったら、セルの表示が省略の「1AA-01234」のままでも 印刷できるようになりました。 ありがとうございました。
ちなみに、よく調べてみたら、会社のPC環境は以下のようになっていました。
WinXP+SP2 EXCEL2003 Acrobat6.0.1Standard+AdobeReader9.1
「一括印刷機能」を使う 私以外の人のPC環境も気になりますので、検証しながら 完成に向けて頑張ります。 また解らないことあったら質問させていただくかもしれません。
仕事中はあまり時間がなく、きちんとお礼を申し上げていませんでした。 かみちゃんさん。HANAさん。色々とありがとうございました。 私の質問の内容はEXCELの域を外れていましたが、ご丁寧にアドバイスいただき 大変有り難く感謝いたします。 おかげ様で、やりたいと思っていた操作ができるようになりました。 本当に助かりました。 また何かありましたら、よろしくお願いします☆
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.