2017-02-03 12 views
6

मैं तो जैसे किसी कार्यपुस्तिका है:एक्सेल सशर्त स्वरूपण प्रिंटिंग के दौरान प्रदर्शित नहीं होता है?

enter image description here

एक सशर्त स्वरूपण स्तंभ में मेरी शीर्ष दस नंबर उजागर करने के लिए यू

enter image description here

साथ

मैं अपने कार्यपुस्तिका में निम्न VBA कोड है :

enter image description here

और यह कोड जो अक्षम कर देता है गणना और पुन: सक्षम कर गणना:

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 

मैं अगर यह क्योंकि मैं calclulations पर और बंद किया जा रहा हूँ पता नहीं है, लेकिन जब मैं इस पत्र मुद्रित करने के लिए, यहां तक ​​कि अगर मैं प्रिंट चाहते हैं पीडीएफ के रूप में। सशर्त स्वरूपण नहीं दिखाता है।

enter image description here

कृपया कोई मुझे दिखा सकते हैं मैं गलत क्या कर रहा हूँ?

संपादित करें: मैं भी कार्यपुस्तिका को यह जोड़ने की कोशिश की है:

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

यह अभी भी काम नहीं करता।

+0

बस कुछ गुगल किया और पाया [यह] (https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_other/conditional-formatting-does-not-update/08fed959-df7a -4e43-a0ae-a2aa5f587edd)। वीबीए कोड एडिटर में प्रॉपर्टी विंडो में, 'EnableFormatConditionsCalculation' सत्य पर सेट है? – jsheeran

+0

@jsheeran ठीक है धन्यवाद इसलिए मैंने रखने की कोशिश की: ThisWorkbook.Worksheets (2)।EnableFormatConditions पहले प्रिंट ईवेंट में गणना करें और इससे कोई फर्क नहीं पड़ता – user7415328

+0

यह एक प्रॉपर्टी है, एक विधि नहीं। इसे 'यह वर्कबुक। वर्कशीट्स (2) में बदल रहा है। सक्षमफॉर्मैट कंडीशनेशन = सही' कोई फर्क पड़ता है? – jsheeran

उत्तर

0

आपके वास्तविक प्रश्न के संबंध में, "मैं क्या गलत कर रहा हूं?", मुझे लगता है कि उत्तर वास्तव में "कुछ भी नहीं हो सकता है!"

यदि प्रिंट करने के लिए जब आप स्वरूपण करते हैं तो प्रारूपण दिखाई देता है (क्योंकि आपने पहले ही गणना की है), एक्सेल इसे प्रिंट करना चाहिए; और आपके प्रिंट पूर्वावलोकन में पौराणिक कथाओं में रंग से पता चलता है कि कोई प्रिंट सेटिंग्स नहीं है जो रंग को मुद्रित होने से रोक रही है। तो एक संभावना है कि यह एक्सेल सही ढंग से व्यवहार नहीं कर रहा है।

मैं सामान्य रूप से वह उत्तर नहीं देता, क्योंकि आमतौर पर ऐसा कुछ कारण होता है कि क्यों कुछ होता है, लेकिन दृश्य स्वरूपण मुद्रित नहीं करना वास्तविक समस्या की तरह लगता है। मैं निम्नलिखित जांच और कार्यवाही का सुझाव देता हूं:

प्रिंट करने की कोशिश करने से पहले मैन्युअल रूप से गणना को स्वचालित रूप से चालू करने का प्रयास करें। यदि यह इसे ठीक करता है, तो यह पुष्टि करता है कि एक्सेल को मैन्युअल गणना के साथ सशर्त स्वरूपण के संयोजन के साथ समस्याएं हैं (भले ही इसे नहीं करना चाहिए)। इस मामले में, एक संभावित समाधान एक अलग प्रिंट बटन बनाना है, जो स्वचालित रूप से गणना करता है, वर्तमान सेटिंग्स के साथ प्रिंट करता है, और फिर स्वचालित रूप से गणना को बदल देता है।

एक और समाधान, जिसके लिए थोड़ा और प्रयास की आवश्यकता है, वीबीए के साथ सशर्त स्वरूपण को प्रतिस्थापित करना है। मुझे उम्मीद है कि यह काम करेगा, क्योंकि मैन्युअल रूप से लागू स्वरूपण अभी भी प्रिंट करना प्रतीत होता है। आपके कोड को केवल डेटा की प्रत्येक पंक्ति के माध्यम से लूप की आवश्यकता होगी, यह देखने के लिए कि क्या यह शीर्ष 10 में है, वर्तमान पंक्ति में मान की तुलना करें, फिर पंक्ति पर सभी कक्षों के लिए पृष्ठभूमि रंग सेट करें।

संबंधित मुद्दे