[[20081204132027]] 『全シートを逆から印刷する』(おいら) ページの最後に飛ぶ

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

 

『全シートを逆から印刷する』(おいら)

はじめまして!過去ログからうまく検索できず新規で申し訳ございません。
ブックの全シートを一括で印刷するのですが、左から順に印刷するのではなく
一番右のシートから順に左へ印刷をしたいのですが、印刷順序を変えるまたは
シートの順序をパッと逆に並びかえる方法をご教示いただけませんか?

よろしくお願いします。

Excel2000
Windows2000

だと思います。


 シートの並びを逆順にします。
Sub Test鮎()
Dim Sh_Cnt As Long, i As Long, x As Long
Sh_Cnt = Worksheets.Count
For i = Sh_Cnt To 2 Step -1
    x = 1 + x
    Sheets(Sh_Cnt).Move Before:=Sheets(x)
Next i
End Sub

 (川野鮎太郎)

鮎太郎様
お礼が遅くなり、大変申し訳ございません。
これは、もしや「マクロ」ですか?
まったくもって、無知なのです・・・
こんなおいらには無理ですかね?


 特に難しくは無いですよ。

 Altキーを押しながらF11(ファンクションキー)を゙(*・・)σ【F11】ぽちっとな♪
 出てきたVBAの画面で、挿入>標準モジュールで出てきたVBEの画面に、
 上で書いたコードをコピーして貼り付け

 ワークシートに戻り、ツール>マクロ>マクロと進み、
 Test鮎を実行してください。

 (川野鮎太郎)

鮎太郎様

早速ありがとうございます!
思わず、おおっと声をあげそうになりました (^^ヾ

ところで、ちょっとだけ不完全・・・

 Sheetは左から「200712」「200801」...「200812」と並んでいます。
 実行後の結果は、「200809」...「200712」「200812」「200811」「200810」
 最後の右3つは左に来て欲しいのです。「200812」「200811」「200810」「200809」...「200712」と。

 何か手はありますか?

 よろしくお願いします。


 !?工エエェ(゚〇゚ ;)ェエエ工!? そんなことはないはずですが・・・。

 (川野鮎太郎)

 逆から印刷?

 Sub test()
 Dim i As Long
 For i = Sheets.Count To 1 Step - 1
     Sheets(i).PirintOut
 Next
 End Sub
 (seiya)

seiya様

 こんばんは
 上記で実行試みましたが、このプロパティまたはメゾットをサポートしていません。Error438
 とで、デバックを押下したところ4行目にチェック(?)が入りました。

 ほんと、まったくの素人をお助けください。

 よろしくお願いします

     Sheets(i).PrintOut
               ~~~~~~~~
 (やっちん)


やっちん様

 ありがとうございます。

 ところがです!
 エラー1004 worksheetクラスのprinoutメソッドが失敗しました
 というエラーが出て、途中までしか出力できませんでした。

 何のことやら...

 解決方法お教え願えないですか?

度々すみません

 出力は全ページ出ました。

 同じ作業をする者に説明するにあたり、このエラーが出ないほうが好ましいのです。
 このエラーを回避する方法を教えてください

 よろしくお願いします。

 Sub test()
 Dim i As Long
 For i = Sheets.Count To 1 Step - 1
     Sheets(i).PrintOut
 Next
 End Sub

 seiyaさんの上記コード、テストブックにて実行しましたがエラーは出ませんでした。
 (XP/Excel2003、標準モジュール、シートモジュール、ブックモジュールに貼り付けて確認)

 >エラー1004 worksheetクラスのprinoutメソッドが失敗しました
 >というエラーが出て、途中までしか出力できませんでした。
 とありますが
 >出力は全ページ出ました。

 何をしたらエラーがなくなったのか、それが分かれば糸口になりそうですね。(通りすがり)


 通りすがり様

 ありがとうございます。

 印刷しようとしているブックはマクロで作られたものだからってことありますか?
 テストブックで実行したらエラーは出ませんでした。

 社員番号で対象者を入力検索して、別のシステムの勤怠情報をエクセルに
 勤務票として出力というものを組んでもらっていて
 そのブックの勤務票を逆に出力しようとしているのです。

 勤務票として出力するマクロを逆になるようにしてもらえばと声が聞こえそうですが、
 逆にしないケースもあるもので・・・現状のまま必要に応じ逆に印刷したいと思っているのです。

 ちなみに、出力は全sheet出来たあとに、あのエラーが表示されます。

 おっと、ミスタイプでしたね。すみません。
 各シートの状況が不明なので、わかりませんが、
 もしかして、Dialogシートがありませんか?
 (seiya)

seiya様

 いいえ、とんでもないです。

 Dialogシート?何なのかが分かりません。
 もし、ある場合はまた違う方法があったりするのですか?
 全sheetは出力できるし、エラーは無視して終了するって方向で進めた方がいいのかな...

 (おいら)

 分からなかったら、検索してみましょう。
http://www.google.co.jp/search?hl=ja&q=%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%80%80Dialog%E3%82%B7%E3%83%BC%E3%83%88&lr=&aq=f&oq=
 Googleで「エクセル Dialogシート」を検索。

 あとは、非表示のシートが有ったりするかも?
 エクセルのメニュー・書式(O)→シート(H)> のなかに
  「再表示(U)」は黒い文字になっていますか?
  それとも、白っぽい文字でしょうか?

 (HANA)

HANA様

 しばらく立ち寄れない状況だったため、お礼が遅くなりすみません。
 「再表示(U)」は黒い文字でした。
 再表示するSheetが1〜3まであったので、すべて削除してマクロ実行したらエラーは出ませんでした。

 エラーの回避は理解できたものの、数十個というブックに対してこのマクロを実行したいと
 思っているので各ブックで非表示Sheetを削除するのも・・・う〜ん。と考えるところです。

 数十個のブックに対してというのはここで初めて口にしましたが、そうであれば各ブックにマクロを
 実行するよりも効率的なマクロが組めるものですかね?ついでに質問しちゃってスミマセン。

 (おいら)

 その非表示に成っていたシートは
 消してしまっても大丈夫だったんですか?

 >社員番号で対象者を入力検索して、別のシステムの勤怠情報をエクセルに
 >勤務票として出力というものを組んでもらっていて
 の方で使用されていたりしませんよね。

 非表示のシートが有ると言う事が分かっていれば
 非表示のシートは飛ばすようにすれば良いと思います。

 「Sheets(i).PrintOut」の
 上に
    If Sheets(i).Visible Then
 下に
    End If
 これで、Visibleのシートに関してのみ
 PrintOutが実行されるようになります。

 一応お伺いしてみますが、一つのシートにページは1枚以上有るのでしょうか。
 一枚しか無いのなら、プリンタの設定の「逆から印刷」ってのが
 使えるかと思いまして。
 複数ページ有るなら駄目ですし、プリンタのオプションとして
 その機能が付いている必要がありますけどね。

 >各ブックにマクロを実行するよりも効率的なマクロ
 マクロで「複数の指定したブックを次々に開いて印刷して閉じる」
 と言うコードにすれば、効率的と言えるかもしれませんね。

 印刷する「数十個のブック」はどの様に決定されるのですか?
 例えば、
  ブック名が、○○,××,△△,□□・・・・ とか
  有るフォルダに入っているブック全て とか
 おいらさんがどのブックを印刷したいのか
 私には分かりませんし、エクセルだって分かりませんので
 どうにかして教えてあげる必要が有ります。

 (HANA)

 全てのブックが開かれているという条件で

 Sub test()
 Dim wb As Workbook, i As Long
 For Each wb In Workbooks
     For i = wb.Sheets.Count To 1 Step -1
         If wb.Sheets(i).Visible = xlSheetVisible Then
                                   '↑にする必要があったような...
             wb.Sheets(i).PrintOut
         End If
     Next
 Next
 End Sub
 (seiya)

HANA様
seiya様

 ありがとうございます。
 全ブックを開いた状態でseiya様のマクロをコピペして実行したらエラーは出ませんでした。

 なお、1Sheetには、1ページのみですが、プリンタの設定に「逆から印刷」というものは見当たりませんでした。

 >社員番号で対象者を入力検索して、別のシステムの勤怠情報をエクセルに
 >勤務票として出力というものを組んでもらっていて
   担当者により、ここで作成した対象者分のブック(○○、△△・・・)をデスクトップに
   置いたり、フォルダに置いたりと様々です。

 全て開いた状態でなく、できるとありがたいのですが・・・

(おいら)


   担当者により、ここで作成した対象者分のブック(○○、△△・・・)をデスクトップに
   置いたり、フォルダに置いたりと様々です。

 全て開いた状態でなく、できるとありがたいのですが・・・

 各ファイルの正確なファイルパスがわかっていれば何とかなると思いますが
 それ以外は無理だと思います。
 いずれにしても、ファイルは開かないとプリントできないと思いますよ?
 (seiya)


 動かしてないので
 動かないかもしれませんが。
Sub test()
Dim wb As String, i As Long, swb
    With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Add "エクセル", "*.xls"
        If .Show = -1 Then
            For Each swb In .SelectedItems
                Workbooks.Open swb
                wb = Dir(swb)
                     For i = Workbooks(wb).Sheets.Count To 1 Step -1
                         If Workbooks(wb).Sheets(i).Visible = xlSheetVisible Then
                             Workbooks(wb).Sheets(i).PrintOut
                         End If
                     Next
                Windows(wb).Close
            Next
        End If
    End With
End Sub

 (HANA)

HANA様

 度々スミマセン。ありがとうございます。
 ブックを開かない状態で上記マクロをVBAに貼り付けるということですか?

 まず、テスト用に数個ブックをデスクトップのフォルダにまとめてみたのですが、
 ブックを開いて、Alt+F11で挿入>標準モジュールに出てきた画面にマクロを貼り付けるという
 教わったとおりの方法しか分からないのです・・・

 何から何まで質問ばかりで申し訳ないです。

 (おいら)

 えっと、
  このマクロを貼り付けたブックを一つ作成
 して下さい。
 (印刷するブックとは別ブックで)

 その後、このブックだけを開いてマクロを実行です。

 (HANA)

 済みません、動かなかったのでコード変更しました。
 再度貼り付けてやってみて下さい。

 (HANA)

 フォルダに纏めてあるなら

 Sub test()
 Dim myFolder As String, fn As String, i As Long 
 With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show Then
        myFolder = .SelectedItems(1)
    Else
        Exit Sub
    End If
 End With
 fn = Dir(myFolder & "\*.xls")
 Do While fn <> ""
     With Workbooks.Open(myFolder & "\" & fn)
         For i = .Sheets.Count To 1 Step - 1
             If .Sheets(i).Visible = xlSheetVisible Then
                 .Sheets(i).PrintOut
             End If
         Next
         .Close False
     End with
     fn = Dir
 Loop
 End Sub
 (seiya)

 seiya様
 HANA様

 お礼が年を越してしまい、申し訳ございませんでした。

 フォルダにまとめてある・・・seiya様の方法は私にはやり遂げることが出来ませんでした。

 全ブックを開いて、HANA様のコードで実行で進めて行こうかと思います。
 今さらながらですが、このコードの中に「セキュリティープリンタ設定で印刷」という
 指示を入れることができるのであれば、最後にご教示いただけると幸いです。

 みなさまにはいろいろなお力を借りて大変感謝しております。
 ありがとうございました。

 「全ブックを開いて」は、seiyaさんのコードです。

 私の載せたコードは、どのようにうまくいかないのですかね?
 エラーが出て止まるなら、そのメッセージと
 止まった場所を教えて下さい。

 再度書いてみますが
  デスクトップのフォルダにファイルがまとめてありますね。
  ブックを1つ【新規作成】し、マクロを貼り付け
  このブックのみが開いた状態でマクロを実行
 です。

 また「セキュリティープリンタ」というのは
 皆さんで共通の一台 ということになるのでしょうか。
 それとも、複数台あるのでしょうか。

 (HANA)

HANA様

 何度もありがとうございます。

 >ブックを1つ【新規作成】し、マクロを貼り付け
 これは、標準モジュールに貼り付けということでいいのですよね?
 そもそも、ここが間違っていたのかもしれません。

 なお、デスクトップには、当該フォルダ以外のフォルダも存在しています。

 新規ブックの標準モジュールにコードを貼り付け、ブックでツール>マクロ>マクロ>実行 しました。

 オブジェクトはこのプロパティまたはメソッドをサポートしていません。エラー438となり、
 コードのWith Application.FileDialog(msoFileDialogFolderPicker)
 に黄色のアミカケがされます。

 セキュリティープリントの件ですが、共有使用している複数ある複合機を時に応じて出力する
 プリンタを指定して使用しています。印刷指示の際にプロパティで「セキュリティープリント」で実行し、
 他者の出力物が混在しないように各自が複合機にて暗証番号を入力して、出力するという方法を取っています。

 質問の度に詳細を伝えるような、手間をかけていてすみません。

 (おいら)

 標準モジュールで良いです。
 ただし、バージョンが2000の様ですので
 エラーメッセージ通りサポートしていないですね。。。

 >セキュリティープリントの件
 は、状況がよく分からないので取り敢えず
 プリンタを選べるようにしてみます。
 (こちらは上手く行ったら儲け物 程度の物です。)

 と言っても、まずは自動連続印刷が動くことが先なので
 まずはこのまま動かしてみて、
 上手く行くようならコード内の「'」(4箇所)を消してやってみて下さい。

 '------
Sub test1()
Dim wb As String, i As Long, wba, swb
Dim spn As String
wba = Application.GetOpenFilename( _
        FileFilter:="エクセルファイル(*.xls),*.xls" _
        , MultiSelect:=True _
        )
If IsArray(wba) Then
    spn = Application.ActivePrinter
    Application.Dialogs(xlDialogPrinterSetup).Show
    For Each swb In wba
        Workbooks.Open swb
        wb = Dir(swb)
            For i = Workbooks(wb).Sheets.Count To 1 Step -1
                If Workbooks(wb).Sheets(i).Visible = xlSheetVisible Then
                    Workbooks(wb).Sheets(i).PrintOut
                End If
            Next
        Windows(wb).Close
    Next
End If
    Application.ActivePrinter = spn
End Sub
 '------

 (HANA)

HANA様

 ありがとうございます。
 このコードで実行してみたところ、事前にコードのブックに出力プリンタを指定しておく必要がありましたが・・・
 ファイルを開くが表示されたのでフォルダ内全てのファイルを選択して開くにしたら出来ました。

 なお、各ブックの各シートに印刷設定でセキュリティーをかけたら、思う出力が出来たのですが
 ブック数もシート数も多いので、それらに設定をかけるのは現実的ではありません(泣)

 セキュリティーは諦めましょうか・・・

 また、「'」の箇所4(5?)箇所を削除して実行した場合の差が分かりませんでした。

 (おいら)

 印刷するだけなら出来たのですね。
 「'」を削除してみました。
 もう一度コピペし直して実行してみて下さい。

 プリンタを選択する画面が出ると思いますが・・・。
 (これもバージョン違いでスルーされるとか?)

 なお、私はセキュリティプリンタ成る物を
 使用したことが有りませんし、試せる環境も有りませんので
 上手く行かないようで有れば、他の方のレスをお待ち下さい。

 (HANA)

HANA様

 ありがとうございます。
 プリンタ選択画面でセキュリティーの設定が出来ました。
 これで、希望のとおりの出力が出来そうです。

 何度も何度もご丁寧に教えてくださり、本当にありがとうございました。

 また、機会がありましたら、よろしくお願いします。

 (おいら)

再びの登場でスミマセン。

 逆順にこだわっていろいろご教示いただいておりましたが、逆で印刷しない担当者から
 フォルダ内のすべてのファイルを一括で印刷する方法を教えて欲しいという要望が出てしまい・・・

 フォルダ内のファイルをプリンタ指定出来て、一括印刷する方法をご教示ください。

 よろしくお願いします。

(おいら)


 コード全体はよくみてませんが、ぱっと見、

 > For i = Workbooks(wb).Sheets.Count To 1 Step -1
↓
  For i = 1 To Workbooks(wb).Sheets.Count

 とするだけでは?

 >プリンタ指定出来て、

 については、プリンタを切替える作業をマクロの自動記録
 すれば参考になるコードが得られると思います。
 (とおりすがり2)

とおりすがり2様

 ありがとうございます!

 無事思いとおりの印刷が出来ました。

 (おいら)

コメント返信:

[ 一覧(最新更新順) ]


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