こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【Excel】書式設定を元に戻す

Excel2003を使用しています。

作業グループで印刷する場合、印刷する前にセルの塗りつぶしを解除して印刷後、その設定を元に戻すというマクロを作りたく、先日質問させていただきました。

「新しいマクロの記録」でできたコードに回答をいただいた内容を加えてマクロを作りました。印刷後に設定を“元に戻す”コードが記録されていないようなのですが、どのようにコードを書いたらいいのでしょうか?

Cells.Select
Selection.Interior.ColorIndex = xlNone
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Range("A1").Select

コードの一部を記載しておきますので、初歩的な質問で申し訳ありませんが、よろしくお願いします。

投稿日時 - 2007-02-19 15:02:43

QNo.2765942

困ってます

質問者が選んだベストアンサー

前回「白黒印刷にされては」と回答したものです。
今回もご質問に対する直接的な回答でなくて申し訳ないですが、「シートをコピーし、背景色を消して印刷後、コピーしたシートを削除する」方法ではダメですか?

セルの背景色を退避して戻すよりは簡単かもしれません。以下は「シートの部分印刷も可能にする」ために印刷ウィザードを開くようにしていますが、シート決め打ちで印刷するだけならもう少し簡略になると思います。

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

投稿日時 - 2007-02-19 15:35:41

お礼

zap35 さん、こんにちは。
今回も目を留めてくださり、ありがとうございます。

>「シートをコピーし、背景色を消して印刷後、コピーしたシートを削除する」方法ではダメですか?

こういう考え方もあるのですね。勉強になります。
“元に戻す”ということばかり考えていましたので、全く思いつきませんでした。

教えていただいたコードで試してみようと思います。
ありがとうございました。

投稿日時 - 2007-02-19 15:48:16

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

これ、簡単じゃないですよ。

というのも、このマクロは「何も考えずにシート全部を選択して
塗りつぶしを解除する」処理をしていますので、印刷後にどこが
塗りつぶされていたかを判断する方法がないんです。

ですので、「新しいシートを挿入して、そこにデータをコピー、
塗りつぶしを解除して、そのシートを削除」という方針で行くしか
ないんじゃないかと。例えばこんな感じですかね。

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

シートを削除するところで警告が出ますが、これは「削除」のボタンを
押せばオッケーです。この警告を解除することも出来ますが、なんらか
の理由でマクロが中途で止まったときに、ヘタすると二度と警告が出なく
なりますので、毎回クリックされたほうがいいかと思いますよ。

投稿日時 - 2007-02-19 15:50:30

お礼

回答ありがとうございます。

>印刷後にどこが塗りつぶされていたかを判断する方法がないんです。

そうなんですね。
アドバイスいだたいた方法でやってみます。

詳しく説明していただき、ありがとうございました。

投稿日時 - 2007-02-19 16:06:45

あなたにオススメの質問