[[20100414122738]] 『エクセルで一覧にしたxdwファイルを印刷』 (よーこ)  ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エクセルで一覧にしたxdwファイルを印刷』 (よーこ)

OS XP
Ver Excel2003

はじめて投稿させていただきます。

『エクセルで一覧にしたxdwファイルを印刷』(えびあん) さんからの質問と同じ内容で恐縮ですが、私も回答どおりに実行すると動くようになったのですが、プリントする際に順番が変わってしまいます。プリンター設定をいじると順番どおりにいくようですが、共有のため、その設定は行えません。

大変お手数ですが、順番どおりに出力する方法はございますでしょうか?
下記にえびあんさんの質問と回答を載せます。

====
プロフェッショナルの皆様のお知恵をお借りしたく、お世話になります。

 よろしくお願いします。
 エクセルで拡張子xdwファイル(ドキュワークス)をE列に一覧にしてあるのですが、
 マクロか何かでE列と同じファイル名のものを指定したフォルダより
 次々印刷できる方法などはないのでしょうか?
 今はハイパーリンクをして、ひとつづつ開いて手動で印刷しているのですが、
 一覧の内容が30も40もあるものが複数あり、ちょっと遠い目になりつつあります…

 便利な方法、ありませんか・・・?
====

 '=======================================================================
 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

 回答済みになっていたので勝手に修正 13:13 (てつろう)


 Shellで取得したファイル順で処理してるのでセルの順番ではなくなっているのかな?
 myarrayの順番にすれば良いのでしょうけど、Shellの扱いがイマイチ微妙にわからないので
 ヒントだけですみません。

 お詫びにDocuWorksが正規にインストールされているのであれば
 DocuWorks Viewer Controlが使えるはずなので・・・
 ユーザーフォームを配置してツールボックスを右クリックでその他コントロールを選ぶと
 コントロールの追加ウインドウが出るので、その中からDocuWorks Viewer Controlに
 チェックを入れてOKします。
 ツールボックスにDwCtrlEdというコントロールが出来るので、それをフォーム上に配置します。
 で、準備は完了で UserFormActivateイベントにでも

  Private Sub UserForm_Activate()
  Dim tbl, i As Long, flg As Boolean
  Const myFolder As String = "D:\test\"
  tbl = Worksheets("Sheet1").Range("E1").CurrentRegion.Value
  For i = 1 To UBound(tbl)
    With Me.DwCtrlEd1
      flg = .LoadFile(myFolder & tbl(i, 1) & ".xdw")
      If flg Then
        .PrintNoDialog
        .CloseFile
      End If
    End With
  Next i
  Unload Me
  End Sub

 こんなコードを入れてみてください。
 あとはボタンか何かで

  Sub ボタン1_Click()
  UserForm1.Show
  End Sub

 のようにフォームを起動すれば順番に印刷できると思います。

 SDKが配布されていたので、それを参考に書いてみました。
 直接コントロールを操作するので、私にはこちらの方が解り易かったですが
 (momo)

返信が遅くなりました。
momoさんありがとうございます。

まだ検証を行っていませんが、イメージがつかめてきました。
検証後、また改めて結果を報告いたします。

お忙しい中ありがとうございます。


 質問者さんが最終報告する前ですが、時間が経っているのでこちらに書き込みます。
(momo)さんの回答で使用しようと思うのですが、
 オートフィルタが設定されていると、tblに可視セル行のみをうまく取り込めなく解決方法を探しています。

 CurrentRegion.Value だと非表示行までテーブルに取り込んでしまうし、
 CurrentRegion.SpecialCells(xlCellTypeVisible) だと連続された行までしかtblに取り込めないのです。

 あまり詳しくないのでWebで検索してみたのですが、もしかしてCurrentRegion以外でないとダメなのでしょうか?

 OS XP
 EXCEL 2003
 (わんころ)

 CurrentregionプロパティはRange("A1").CurrentRegion だと、
A1セルを含む、空白セルで囲まれた矩形範囲が取得されます。
だから、取得したい範囲内に、空白行や、空白列が存在すると
途中までしか取得できません。
 
Autofilter.Range.SpecialCells(xlCellTypeVisible) 
ですと、オートフィルタが適用されているセル範囲における可視
セルが取得できます。
 
ただし、これがtblに取得できるかどうかは未検証です。
(みやほりん)(-_∂)b

 書き換えてみましたが、tblに取り込むのは同じく途中までとなってしまいます。
 もう少し検索して勉強しつつ代案を探してみます。
 コメントありがとうございました。
 (わんころ)

 なんか見たことあるな〜と思ったら私の回答でしたね。
 忙しい&今夜から出張なのでヒントだけしか回答できずにすみませんが・・・

 Autofilter.Range.SpecialCells(xlCellTypeVisible)
 をAreasで回すと出来るかな?と思います。

 For Each myArea in Autofilter.Range.SpecialCells(xlCellTypeVisible).Areas
   tbl=myArea.Value

 のように。
 未検証ですので出来なかったらすみません。

 (momo)

 For Each myArea in Autofilter.Range.SpecialCells(xlCellTypeVisible).Areas
 を書き加えて、tbl=〜 を置き換えるだけではダメなのですね。
 myAreaの変数の宣言エラーはなんとかなりましたが、
 Autofilterの変数の宣言エラーで行き詰まりました。
 検索してみます。
 (momo)さん、お忙しい中ありがとうございます。

 (わんころ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.