[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日数分のシート印刷』(aki)
こんにちは、よろしくお願いします。
印刷についてご教示いただきたく参りました。
DATE/1/2/3・・・28/29/30/31/name/rank/number とシートが35枚あります。 1〜31は月の日付を意味しており、その他には必要なデータが入っております。
やりたいことは 例えば9月なら1〜30までを選択して印刷、10月なら1〜31までを選択して印刷したいです。 今までは、ベタたのですが月に関わらず31枚印刷し
Sub まとめ印刷()
Sheets(Array("1", "2",〜 "31")).Select
End Sub
Sub 1枚ずつ印刷()
Sheets("1").Select ActiveWindow.SelectedSheets.PrintOut Sheets("2").Select ActiveWindow.SelectedSheets.PrintOut 〜 Sheets("31").Select ActiveWindow.SelectedSheets.PrintOut
End Sub
でやっておりましたが、もっとスムーズにできればと思いまして、、、 まとめ印刷では、プリンターの設定で両面印刷になってしまうので、1枚ずつ印刷をやりたいと思っております。ご教示よろしくお願いします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
DATEのシートに希望月を入力する場所があります。(DATEのc11です) 基本的には、DATE(year(c11),month(c11)+1,1)となっており翌月を印刷する形です。
(aki) 2021/09/15(水) 12:32
Sub さんぷる() Dim 日付 As Date Dim i As Long
日付 = InputBox("年月日?")
For i = 1 To Day(DateAdd("m", 1, Format(日付, "yyyy/mm/01")) - 1) Worksheets(i & "").PrintOut Next i End Sub
(もこな2) 2021/09/15(水) 12:46
Sub シート印刷() Dim d As Long For d = 1 To Day(WorksheetFunction.EoMonth(Range("C11"), 0)) Worksheets("" & d).PrintOut Next End Sub
(わからん) 2021/09/15(水) 13:02
小生プリンターの環境がないので 各々
Sub さんぷる() Dim 日付 As Date Dim i As Long 日付 = InputBox("年月日?") For i = 1 To Day(DateAdd("m", 1, Format(日付, "yyyy/mm/01")) - 1) Worksheets(i & "").PrintPreview Next i End Sub
Sub シート印刷() Dim d As Long For d = 1 To Day(WorksheetFunction.EoMonth(Range("C11"), 0)) Worksheets("" & d).PrintPreview Next End Sub
で実施しましたがどちらともエラーになってしまいました。 さんぷるでは、2021年10月1日、2021/10/01、20211001と入力しましたがNGでした。 改めて勉強し検証します。お忙しいところありがとうございます。 (aki) 2021/09/15(水) 19:32
また、エラーが発生したとき「i」には何が格納されていましたか?
さらに、アクティブブックにその名前のシートは、間違いなく存在していましたか?
(もこな2) 2021/09/15(水) 20:02
実行エラー9が表示されまして、iには1が格納されてました。 また、シート名は半角で1と入力してあり、シートも存在しております。 連絡ありがとうございます。自分でも探ります。 (aki) 2021/09/15(水) 21:58
インデックスが有効範囲にありません。実行エラー9が表示されました。 iには1が格納されてました。 また、シート名は半角で1と入力してあり、シートも存在しております。 連絡ありがとうございます。自分でも探ります。 2度書きしてすみません。 (aki) 2021/09/15(水) 22:00
Sub さんぷる() Dim 日付 As Date Dim i As Long 日付 = InputBox("年月日?") For i = 1 To Day(DateAdd("m", 2, Format(日付, "yyyy/mm/01")) - 1) Worksheets(i).PrintPreview Next i End Sub
Sub シート印刷() Dim d As Long For d = 2 To Day(WorksheetFunction.EoMonth(Range("C11")-1, 0)) Worksheets(d).PrintPreview Next End Sub
で動きました。ありがとうございます。 後日プリンタ環境で試して見たいと思います。 ご教示ありがとうございます。 (aki) 2021/09/15(水) 22:13
これで動くとのことですが、別の月でも試してみてください。
Sub シート印刷() Dim d As Long For d = 2 To Day(WorksheetFunction.EoMonth(Range("C11")-1, 0)) Worksheets(d).PrintPreview Next End Sub
C11セルが「2021/9/1」だとしたら、dは2〜31になるのでいいですが、
C11セルが「2021/10/1」だとしたら、dは2〜30になるので29日までしか印刷されません。
修正するなら、こうですかね。
For d = 2 To Day(WorksheetFunction.EoMonth(Range("C11"), 0)) + 1
(わからん) 2021/09/16(木) 08:59
■1
話がよくみえないです。
"どこで"エラーが出るのかも重要な話ですが、「実行時エラー9 インデックスが有効範囲にありません」ならば、対象のシートが存在しないというのが一番怪しいところです。
よって、エラーが出ると仰ってるものと動いたと仰っているものの違いは、当月を対象にするか翌月を対象にするかの違いでしかないようなので、「i」や「d」が1の時に「実行時エラー9 インデックスが有効範囲にありません」が出るのであれば、対象を翌月にしたところでエラーは解消しなさそうですが・・
■2
↓について、少々わかりにくいですが、例えば【2021年10月】を対象にしたいときは、セルになんと入力するのですか?
DATEのシートに希望月を入力する場所があります。(DATEのc11です) 基本的には、DATE(year(c11),month(c11)+1,1)となっており翌月を印刷する形です。
もしも、「2021/10/1」のように対象月の【日付】を入力するということであれば↓のようなアプローチも有効だとおもいます。
Sub 別案() Dim Mydate As Date
With Worksheets("DATE").Range("C11") For Mydate = DateSerial(Year(.Value), Month(.Value), 1) To DateSerial(Year(.Value), Month(.Value) + 1, 0) Worksheets(Format(Mydate, "d")).PrintPreview Next End With End Sub
(もこな2 ) 2021/09/16(木) 09:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.