オートフィルターにある項目を順に表示して印刷する、という以下のVBAを使用しています(A10からデータ、A9に項目名)。

オートフィルターにある項目を順に表示して印刷する、という以下のVBAを使用しています(A10からデータ、A9に項目名)。 今はアクティブシートにオートフィルターがありアクティブシートを印刷する、という状態ですが、例えばオートフィルターがSheet1、印刷するのはSheet2、となった場合です。Sheet2にコントロールボタンを配置したいのでアクティブシートはSheet2の状態です。 詳しい方よろしくお願いいたします。 Sub オートフィルター選択・印刷() Dim Dic As Object Dim Rng As Range Dim N As Long Set Dic = CreateObject("Scripting.Dictionary") For Each Rng In Range("A10", Cells(Rows.Count, 1).End(xlUp)) Dic.Item(Rng.Value) = Empty Next If Dic.Exists("") Then Dic.Remove ("") For N = 0 To Dic.Count - 1 Range("A9").AutoFilter field:=1, Criteria1:=Dic.Keys()(N) ActiveSheet.PrintOut Preview:=False ' Next If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData Set Dic = Nothing End Sub

補足

文章が変でしたので修正します。 例えばオートフィルターがSheet1、印刷するのはSheet2、となった場合です。 →例えばオートフィルターがSheet1、印刷するのはSheet2、となった場合どういったコードにすればよいでしょうか?

Visual Basic78閲覧xmlns="http://www.w3.org/2000/svg">250

ベストアンサー

0

シートが省略されている部分には明示し、 ActiveSheetは「対象のシート」と置き換えます。 Sub オートフィルター選択印刷()     Dim Dic As Object     Dim Rng As Range     Dim N As Long     Dim Ws As Worksheet          Set Ws = Worksheets("Sheet1")          Set Dic = CreateObject("Scripting.Dictionary")          For Each Rng In Ws.Range("A10", Ws.Cells(Ws.Rows.Count, 1).End(xlUp))         Dic.Item(Rng.Value) = Empty     Next     If Dic.Exists("") Then Dic.Remove ("")          For N = 0 To Dic.Count - 1         Ws.Range("A9").AutoFilter field:=1, Criteria1:=Dic.Keys()(N)         Ws.PrintOut Preview:=False '     Next          If Ws.FilterMode Then Ws.ShowAllData     Set Dic = Nothing End Sub

手元にデータが無いのでまだ試していないのですが、 Ws.Range("A9").AutoFilter field:=1, Criteria1:=Dic.Keys()(N) Ws.PrintOut Preview:=False ' だとSheet1が印刷されないでしょうか?印刷したいのはSheet2です。コード見た感じなんとなくそんな感じがしたのですが・・・。 Ws.PrintOut Preview:=False ' を Sheets("Sheet2").PrintOut Preview:=False ' に変えれば良いのでしょうか・・・?

ThanksImg質問者からのお礼コメント

相談にのってくださりありがとうございました!

お礼日時:2019/3/8 16:04