プロが教えるわが家の防犯対策術!

エクセル365です
一つ目「選択したセルがある行全体を色付けする」

1、常に選択したセルがある行全体を色付けします。
2、印刷するときは、その色付けした行の色が印刷されないようにします。
3、印刷後は、再び1が実行されて常に選択したセルがある行全体が色付けされるようにします。

二つ目「C列に支と入力されたら文字色を赤にする」
4、C列に「支」と入力されたときは、「支」の字の色が赤色になるようにします。
5、この赤色の「支」は画面表示中も印刷時も常に行われるようにする。


1~3は実行されるのですが、4と5がどうしてもできません

今書いてあるコードは以下です。
Option Explicit

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ThisWorkbook.Worksheets(1).Cells.FormatConditions.Delete
Application.ScreenUpdating = True
Application.OnTime Now(), "ThisWorkbook.AfterInsatsu"
End Sub

Private Sub AfterInsatsu()
Dim Rng As Range
Dim Frm As Object

With ThisWorkbook.Worksheets(1)
Set Rng = Worksheets(1).Cells
Set Frm = Rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=CELL(""ROW"")=ROW()")
Frm.Interior.Color = RGB(198, 224, 180)
End With
Application.ScreenUpdating = True
End Sub

Private Sub AfterInsatsu()

Columns("C:C").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=""支"""
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16776961
.TintAndShade = 0
End With
Application.ScreenUpdating = True
End Sub


End Sub

Private Sub AfterInsatsu()

Columns("C:C").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=""支"""
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16776961
.TintAndShade = 0
End With
Application.ScreenUpdating = True
End Sub

A 回答 (2件)

No1です



連投失礼。
投稿してから気が付きました。
Workbookモジュールに記載しているのですね。

ですので、
>そもそもですけれど、
以下の一文は、当方の勘違いです。
読み飛ばしてください。

失礼いたしました。m(__)m
    • good
    • 0
この回答へのお礼

ありがとうございました。
解決できました。
>1~3はVBAのSelectionChangeイベントで実行するような仕組みにしておけば、書式を設定したり外したりしなくても済むと思います。
印刷前に一度、
 Cells.Interior.Color = xlNone
とでもしておけば済む話なので。


なので3行目のCells.FormatConditions.DeleteをCells.Interior.Color = xlNoneに書き換えました。
本当にありがとうございました。

お礼日時:2023/04/22 16:17

こんにちは



>Private Sub AfterInsatsu()
が三つあるようですが、同じ名称のプロシージャだとエクセルには区別が付けられません。
同一モジュール内に記述すると、実行時に「同じ名前があります」のエラーになるはずです。
別モジュールなら、一応、許されますけれど、実行されるのは一つだけです。

>1~3は実行されるのですが、4と5がどうしてもできません
3のプロシージャをひとまず別名にしてみると、5が実行されたりしませんか?

そもそもですけれど、
>Application.OnTime Now(), "ThisWorkbook.AfterInsatsu"
の記述法では、当方の環境ではエラーになりますけれど・・?


以下は、別の仕組みになりますけれど・・
4、5はそのままでも良いのでしょうから、C列に条件付き書式を設定したままにしておいて。
1~3はVBAのSelectionChangeイベントで実行するような仕組みにしておけば、書式を設定したり外したりしなくても済むと思います。
印刷前に一度、
 Cells.Interior.Color = xlNone
とでもしておけば済む話なので。
(イベント処理も条件付き書式も生きたままなので、後始末も不要と思います)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!