Excel条件格式不打印时显示?

我有这样的工作簿:

在这里输入图像描述

用条件格式来突出显示我在U列中的前十位数字。

在这里输入图像描述

我的工作簿中有以下vba代码:

在这里输入图像描述

而这个禁用计算和重新启用计算的代码:

Option Explicit Sub code2() MsgBox "This will take upto 2 minutes." Application.ScreenUpdating = False Dim WB As Workbook Dim I As Long Dim j As Long Dim Lastrow As Long Dim WeekNum As Integer 'Clear Data Sheet On Error GoTo Message With ThisWorkbook.Worksheets("Data") .Rows(2 & ":" & .Rows.Count).ClearContents End With On Error Resume Next Set WB = Workbooks("LO Lines Delivery Tracker.xlsm") On Error GoTo 0 If WB Is Nothing Then 'open workbook if not open Set WB = Workbooks.Open("G:\WH DISPO\(3) PROMOTIONS\(18) LO Delivery Tracking\LO Lines Delivery Tracker.xlsm") End If ' ======= Edit #2 , also for DEBUG ====== With WB.Worksheets(1) Lastrow = .Cells(.Rows.Count, "G").End(xlUp).Row j = 2 For I = 7 To Lastrow WeekNum = CInt(Format(.Range("G" & I).Value, "ww", 2) - 1) ' === For DEBUG ONLY === Debug.Print CInt(ThisWorkbook.Worksheets(2).Range("B9").Value) Debug.Print WeekNum Debug.Print CInt(ThisWorkbook.Worksheets(2).Range("D9").Value) Debug.Print Year(.Range("G" & I).Value) Debug.Print ThisWorkbook.Worksheets(2).Range("B6").Value Debug.Print .Range("M" & I).Value If CInt(ThisWorkbook.Worksheets(2).Range("B9").Value) = WeekNum Then ' check if Month equals the value in "A1" If CInt(ThisWorkbook.Worksheets(2).Range("D9").Value) = Year(.Range("G" & I).Value) Then ' check if Year equals the value in "A2" If ThisWorkbook.Worksheets(2).Range("B6").Value = .Range("M" & I).Value Then ThisWorkbook.Worksheets(3).Range("A" & j).Value = .Range("G" & I).Value ThisWorkbook.Worksheets(3).Range("B" & j).Formula = "=WeekNum(A" & j & ",21)" ThisWorkbook.Worksheets(3).Range("C" & j).Value = .Range("L" & I).Value ThisWorkbook.Worksheets(3).Range("D" & j).Value = .Range("D" & I).Value ThisWorkbook.Worksheets(3).Range("E" & j).Value = .Range("E" & I).Value ThisWorkbook.Worksheets(3).Range("F" & j).Value = .Range("F" & I).Value ThisWorkbook.Worksheets(3).Range("g" & j).Value = .Range("p" & I).Value ThisWorkbook.Worksheets(3).Range("H" & j).Value = .Range("H" & I).Value ThisWorkbook.Worksheets(3).Range("I" & j).Value = .Range("I" & I).Value ThisWorkbook.Worksheets(3).Range("J" & j).Value = .Range("J" & I).Value ThisWorkbook.Worksheets(3).Range("k" & j).Value = .Range("Q" & I).Value ThisWorkbook.Worksheets(3).Range("L" & j).Value = .Range("m" & I).Value j = j + 1 End If End If End If Next I End With Application.Calculation = xlAutomatic ThisWorkbook.Worksheets("Data").UsedRange.Columns("B:B").Calculate ThisWorkbook.Worksheets(2).UsedRange.Columns("B:AA").Calculate On Error GoTo Message With ThisWorkbook.Worksheets(2) '<--| change "mysheet" to your actual sheet name Intersect(.Range(Rows(14), .UsedRange.Rows(.UsedRange.Rows.Count)), .Range("G:G")).WrapText = True Intersect(.Range(Rows(14), .UsedRange.Rows(.UsedRange.Rows.Count)), .Range("G:G")).EntireRow.AutoFit End With End ThisWorkbook.Worksheets(2).Activate Application.ScreenUpdating = True Exit Sub Message: On Error Resume Next Exit Sub End Sub 

我不知道是否因为我打开和closures了计算,但是当我想打印这张纸,即使我打印为pdf。 条件格式不显示。

在这里输入图像说明

请有人能告诉我我做错了什么?

编辑:我也尝试添加到工作簿:

 Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each wk In Worksheets wk.Calculate Next End Sub 

它仍然不起作用。

关于你的实际问题,“我在做什么错了?”,我想答案可能实际上是“没有!

如果在打印时格式是可见的(因为您已经执行了计算),Excel应该打印它; 并且打印预览中图例中的颜色显示没有打印设置阻止打印颜色。 所以有可能是Excel不正确。

我通常不会给出答案,因为通常有什么原因会发生,但不打印可见的格式似乎是一个实际问题。 我build议以下调查和解决方法:

在尝试打印之前,尝试手动将计算转回自动。 如果解决了这个问题,那么它确认Excel将条件格式与手动计算相结合(即使它不应该)。 在这种情况下,可能的解决scheme是创build一个单独的打印button,将计算转换为自动,使用当前设置进行打印,然后将计算变回自动。

另一个需要更多努力的解决scheme是用VBAreplace条件格式。 我希望这将工作,因为手动应用格式仍然似乎打印。 您的代码只需循环遍历每行数据,将当前行中的值与所有行进行比较,查看它是否位于前10位,然后为行中所有单元格设置背景颜色。