- ベストアンサー
【Excel】書式設定を元に戻す
Excel2003を使用しています。 作業グループで印刷する場合、印刷する前にセルの塗りつぶしを解除して印刷後、その設定を元に戻すというマクロを作りたく、先日質問させていただきました。 「新しいマクロの記録」でできたコードに回答をいただいた内容を加えてマクロを作りました。印刷後に設定を“元に戻す”コードが記録されていないようなのですが、どのようにコードを書いたらいいのでしょうか? Cells.Select Selection.Interior.ColorIndex = xlNone ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Range("A1").Select コードの一部を記載しておきますので、初歩的な質問で申し訳ありませんが、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
前回「白黒印刷にされては」と回答したものです。 今回もご質問に対する直接的な回答でなくて申し訳ないですが、「シートをコピーし、背景色を消して印刷後、コピーしたシートを削除する」方法ではダメですか? セルの背景色を退避して戻すよりは簡単かもしれません。以下は「シートの部分印刷も可能にする」ために印刷ウィザードを開くようにしていますが、シート決め打ちで印刷するだけならもう少し簡略になると思います。 Sub TransparePrint() ' 背景色なしでシートを印刷する Dim shtName, orgRange As String Dim resDialog On Error GoTo end0 Application.ScreenUpdating = False If TypeName(Selection) = "Range" Then orgRange = Selection.Address End If shtName = ActiveSheet.Name Sheets(shtName).Copy After:=Sheets(shtName) ActiveSheet.Cells.Interior.ColorIndex = xlNone If orgRange <> "" Then Range(orgRange).Select End If resDialog = Application.Dialogs(xlDialogPrint).Show Application.DisplayAlerts = False ActiveWindow.SelectedSheets.Delete Worksheets(shtName).Activate If orgRange <> "" Then Range(orgRange).Select End If end0: Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
その他の回答 (1)
- FEX2053
- ベストアンサー率37% (7995/21381)
これ、簡単じゃないですよ。 というのも、このマクロは「何も考えずにシート全部を選択して 塗りつぶしを解除する」処理をしていますので、印刷後にどこが 塗りつぶされていたかを判断する方法がないんです。 ですので、「新しいシートを挿入して、そこにデータをコピー、 塗りつぶしを解除して、そのシートを削除」という方針で行くしか ないんじゃないかと。例えばこんな感じですかね。 S_name = ActiveSheet.Name Cells.Select Selection.Copy Sheets.Add ActiveSheet.Paste Selection.Interior.ColorIndex = xlNone ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWindow.SelectedSheets.Delete Sheets(S_name).Select Range("A1").Select シートを削除するところで警告が出ますが、これは「削除」のボタンを 押せばオッケーです。この警告を解除することも出来ますが、なんらか の理由でマクロが中途で止まったときに、ヘタすると二度と警告が出なく なりますので、毎回クリックされたほうがいいかと思いますよ。
お礼
回答ありがとうございます。 >印刷後にどこが塗りつぶされていたかを判断する方法がないんです。 そうなんですね。 アドバイスいだたいた方法でやってみます。 詳しく説明していただき、ありがとうございました。
お礼
zap35 さん、こんにちは。 今回も目を留めてくださり、ありがとうございます。 >「シートをコピーし、背景色を消して印刷後、コピーしたシートを削除する」方法ではダメですか? こういう考え方もあるのですね。勉強になります。 “元に戻す”ということばかり考えていましたので、全く思いつきませんでした。 教えていただいたコードで試してみようと思います。 ありがとうございました。