[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルで一覧にしたxdwファイルを印刷』(えびあん)
[エクセルのバージョン]Excel2003 [OSのバージョン]WindowsXP
プロフェッショナルの皆様のお知恵をお借りしたく、お世話になります。 よろしくお願いします。 エクセルで拡張子xdwファイル(ドキュワークス)をE列に一覧にしてあるのですが、 マクロか何かでE列と同じファイル名のものを指定したフォルダより 次々印刷できる方法などはないのでしょうか? 今はハイパーリンクをして、ひとつづつ開いて手動で印刷しているのですが、 一覧の内容が30も40もあるものが複数あり、ちょっと遠い目になりつつあります…
便利な方法、ありませんか・・・?
大前提
1 VBAを使えば、まあ可能です。よって、この知識が多少なりともある。
2 そのxdwファイルなるもの(私は初めて知ったので)を対象フォルダから選択し、右クリックしたときに 表示されるポップアップメニューの中に 印刷(P) と表示される機能が存在する
私が知っている方法で可能です。 「指定したフォルダより 次々印刷できる方法」これは、E列に列挙されているファイルは、別々のフォルダ に あるということですか? それとも全て同一フォルダにあるファイルですか?
それとも 指定されたフォルダに存在するファイルの中でE列に列挙されたファイル名と一致するものを 印刷したいということですか?
つまり、細かい仕様を記述してください。
ichinose
前投稿の条件を満たすならば・・・、
標準モジュールに
'============================================================= Sub main() Dim fso As Object Dim ff As Object Dim ffi As Object With CreateObject("Shell.Application") Set ff = .NameSpace("C:\Documents and Settings\デスクトップ\testfold") ' ↑印刷対象のxdwファイルがあるフォルダ名を指定する End With Set fso = CreateObject("scripting.filesystemobject") For Each ffi In ff.items If ffi.IsFileSystem And (Not ffi.IsFolder) _ And LCase(fso.GetExtensionName(ffi.Name)) = "xdw" Then ffi.InvokeVerb "印刷(&P)" End If Next Set ffi = Nothing Set ff = Nothing End Sub
上記コードは、指定されたフォルダ内にあるxdwファイルを印刷するコードです。 私は、ドキュワークスなるアプリを持っていませんので上記コードのテストは、pdfファイル(Acrobat)で 確認しました。
ichinose
質問者ではありませんが、 ドキュワークスまたは、ドキュワークスビューワがインストールされていれば きちんと印刷されました。
(川野鮎太郎)
ichinose様 お返事が遅くなりすみません。 回答ありがとうございます! 私の言葉足らずですみません。
「記録」という同一フォルダにxdwファイルがまとめて収納されています。 ブック名「処理済み」シート「●●処理」のE列は、フィルタで選別して表示させています。 「記録」フォルダ内のファイルとE列で表示したファイル名と一致しているものだけを 次々と印刷したいです・・・
あ!申し上げておいたほうが良いと思うので書きます。 E列にファイル名で書かれていてもxdwファイルがない場合があります。 一致しないファイル名はスルーして次の処理へで問題ありません。 (一致しないファイルがどれかは事前にわかるのですが、 E列には表示されていなくてはならなくて、排除できないのです…)
川野鮎太郎様 確認ありがとうございます。 インストールはしてあるので大丈夫です。
(えびあん)
まず、川野鮎太郎さん、確認ありがとうございます。
で、
E列の1行目が項目名で2行目から対象ファイル名が入力されているものとします。 その上でフィルタリングされているとして・・・。
E列のファイル名は
例えば aaa.xdw zzzzz.xdw 等と記述されているとします。
標準モジュールに '======================================================================= Sub main() Dim fso As Object Dim ff As Object Dim ffi As Object Dim Rng As Range Dim myarray As Variant Set Rng = Range("e1", Cells(Rows.Count, "e").End(xlUp)) If Rng.Count > 1 Then myarray = get_array(Rng) With CreateObject("Shell.Application") Set ff = .NameSpace("C:\Documents and Settings\デスクトップ\testfold") ' ↑印刷対象のxdwファイルがあるフォルダ名を指定する End With Set fso = CreateObject("scripting.filesystemobject") For Each ffi In ff.Items If ffi.IsFileSystem And (Not ffi.IsFolder) _ And LCase(fso.GetExtensionName(ffi.Name)) = "xdw" _ And Not IsError(Application.Match(ffi.Name, myarray, 0)) Then ffi.InvokeVerb "印刷(&P)" End If Next Set ffi = Nothing Set ff = Nothing Set fso = Nothing End If End Sub '============================================================================= Function get_array(Rng As Range, Optional except As Long = 1) As Variant On Error Resume Next Dim rngA As Range With CreateObject("scripting.dictionary") For Each rngA In Rng If rngA.Row <> except Then .Item(rngA.Value) = "" End If Next get_array = .Keys End With End Function
ichinose
ichinose様
ありがとうございます、できました! ですが、少し伺いたい事があります。
E列は確実にxdwファイルだけなのです。 ファイル名とは拡張子は含んでいるものをいうのですね… 私の認識不足でした。 書いて頂いたコードのように拡張子まで入力しないと 次々印刷というのは無理なのでしょうか? 私は拡張子なしでE列で入力しているのですが、 それを元に他の処理に繋げているのもあり、 出来ましたら拡張子なしのままでなんとかしたいのですが 折角書いて頂いたコードは大幅に変更しないとならなくなりますか?
(えびあん)
先にコード
'====================================================== Sub main() Dim fso As Object Dim ff As Object Dim ffi As Object Dim Rng As Range Dim myarray As Variant Set Rng = Range("e1", Cells(Rows.Count, "e").End(xlUp)) If Rng.Count > 1 Then myarray = get_array(Rng) With CreateObject("Shell.Application") Set ff = .NameSpace("C:\Documents and Settings\デスクトップ\testfold") ' ↑印刷対象のxdwファイルがあるフォルダ名を指定する End With Set fso = CreateObject("scripting.filesystemobject") For Each ffi In ff.Items If ffi.IsFileSystem And (Not ffi.IsFolder) _ And LCase(fso.GetExtensionName(ffi.Name)) = "xdw" _ And Not IsError(Application.Match(fso.getbasename(ffi.Name), myarray, 0)) Then ' ↑追加しただけ・・・ ffi.InvokeVerb "印刷(&P)" End If Next Set ffi = Nothing Set ff = Nothing Set fso = Nothing End If End Sub
もちろん、先に投稿したFunction get_arrayは、そのまま使います。
これで、E列のデータに拡張子xdwがなくても(ベース名と言ったっけ)作動するはずです。
が、
最初にE列のデータ例を2、3例記述さえしてくれれば、こんな回り道をしなくても済んだと思いますよ!!
ここのサイトの過去の質問でも、 この例を記述しないがためにスレッドが長くなっている質問が少なくありません。
プログラムには、仕様書(またはマニュアル)が必要です。これ、結構面倒ですが、 ここできちんと質問することで、その仕様書をわかりやすく書く練習にはなりますよ!!
ichinose
ichinose様
ありがとうございます、連続印刷出来ました。 そして私がファイル名だと思っていたのは「ベース名」というのですね… 覚えておきます。
私の認識・記述不足で何度もお手間をお掛けして 本当にすみませんでした。 面倒だから…と記載しなかったのではないのですが、 質問するからには回答者の皆様に回答しやすい質問をする為に 何が必要・不要な情報かは質問者側(私)が判断するのではなく、 より多い情報を最初から明記すべきでした。 反省し、以後気をつけます。
(えびあん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.