2017-02-03 40 views
6

Mam skoroszyt tak:Formatowanie warunkowe programu Excel nie jest wyświetlane podczas drukowania?

enter image description here

z formatowania warunkowego do podkreślenia moje top dziesięć liczb w kolumnie U.

enter image description here

mam następujące kody vba w moim skoroszycie :

enter image description here

A to kod, który powoduje wyłączenie i ponowne obliczenie umożliwia obliczenie:

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("L.O. 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) L.O. Delivery Tracking\L.O. 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 

Nie wiem, czy to dlatego, że jestem toczenia calclulations z przerwami, ale gdy chcę wydrukować arkusz, nawet jeśli mogę wydrukować jako pdf. Formatowanie warunkowe nie jest wyświetlane.

enter image description here

Proszę ktoś może mi pokazać, co robię źle?

Edit: Próbowałem również dodanie do tego skoroszytu:

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

Nadal nie działa.

+0

Po prostu trochę googlowałem i znalazłem [to] (https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_other/conditional-format-does-not-update/08fed959-df7a -4e43-a0ae-a2aa5f587edd). W oknie właściwości w edytorze kodu VBA ustawienie "EnableFormatConditionsCalculation" ma wartość true? – jsheeran

+0

@jsheeran ok dzięki, więc próbowałem umieszczenie: ThisWorkbook.Worksheets (2).EnableFormatConditionsCalculation w zdarzeniu poprzedzającym drukowanie i nie miało to znaczenia – user7415328

+0

To właściwość, a nie metoda. Czy zmiana na "ThisWorkbook.Worksheets (2) .EnableFormatConditionsCalculation = True" robi różnicę? – jsheeran

Odpowiedz

0

Jeśli chodzi o twoje aktualne pytanie: "Co robię źle?", Myślę, że odpowiedź brzmi: "Nic!"

Jeśli formatowanie jest widoczne po przejściu do drukowania (ponieważ dokonano już obliczeń), program Excel powinien wydrukować go; a kolor w legendzie w podglądzie wydruku pokazuje, że nie ma ustawień drukowania, które uniemożliwiają drukowanie koloru. Istnieje więc możliwość, że po prostu Excel nie zachowuje się poprawnie.

Zazwyczaj nie podałbym tej odpowiedzi, ponieważ istnieje powód, dla którego coś się dzieje, ale nie jest możliwe wydrukowanie widocznego formatowania. Sugeruję następujące dochodzenie i obejścia:

Spróbuj ręcznie obrócić obliczenia z powrotem do automatycznego przed próbą drukowania. Jeśli to naprawi, to potwierdza, że ​​Excel ma problemy z łączeniem formatowania warunkowego z ręcznym obliczaniem (nawet jeśli nie powinno). W takim przypadku możliwym rozwiązaniem jest utworzenie osobnego przycisku drukowania, który zamienia obliczenia na automatyczne, drukuje z bieżącymi ustawieniami, a następnie zmienia obliczenia z powrotem na automatyczne.

Innym rozwiązaniem, które wymaga nieco więcej wysiłku, jest zamiana formatowania warunkowego na VBA. Oczekuję, że to zadziała, ponieważ ręczne formatowanie nadal wydaje się być drukowane. Twój kod będzie po prostu pętli przez każdą linię danych, porównać wartość w bieżącym wierszu do wszystkich wierszy, aby zobaczyć, czy jest w pierwszej 10, a następnie ustawić kolor tła dla wszystkich komórek w wierszu.