मुझे एक्सेल से पावरपॉइंट, स्लाइड प्रति एक पृष्ठ से कुछ बड़ी डेटा श्रेणियां निर्यात करना है, और निश्चित रूप से मुझे "अनाथ" पंक्तियों या स्तंभों से बचने के लिए पेज ब्रेक का इलाज करना चाहिए।एक्सेल को पृष्ठ ब्रेक को सही तरीके से गिनने के लिए "मजबूर" कैसे कर सकता हूं?
मैं,,, कितने पृष्ठों मैं होता जाँच करने के लिए कोशिश कर रहा हूँ अनुलंब और क्षैतिज किसी दिए गए ज़ूम के साथ HPageBreaks.Count और VPageBreaks.Count पढ़कर, और फिर मैन्युअल रूप से प्रत्येक को तोड़ने की स्थिति को परिभाषित। विचार प्रत्येक पृष्ठ पर लगभग समान चौड़ाई और ऊंचाई होना है।
जब मैं अपना कोड चरण-दर-चरण डीबग करता हूं, तो यह अच्छी तरह से चलता है, और तर्क ठीक लगता है, लेकिन अगर मैं इसे "स्वतंत्र रूप से" चलाता हूं, तो पेज ब्रेक पूरी तरह से बंद हो जाता है। कुछ MsgBox निर्देश जोड़ना, मैं देख सकता हूं कि जब मैं HPageBreaks.Count (या लंबवत) पढ़ता हूं तो मुझे गलत मान मिलते हैं। (यदि मैं मैन्युअल रूप से कोड करता हूं तो मैं सही लोगों की जांच कर सकता हूं)।
कई सारे मंचों पर खोज, मुझे पेपरसाइज (ws.PageSetup.PaperSize = ws.PageSetup.PaperSize) के रीसेट को मजबूर करने जैसे कुछ बदसूरत कामकाज दिखाई देते हैं। उनमें से कुछ की कोशिश करने के बाद, थोड़ा बेहतर काम करना प्रतीत होता था कि पेजसेटअप में बदलाव से पहले प्रिंट कम्यूनिकेशन को बंद करना था, और फिर इसे चालू करना था। यह मेरा चादरों से ज्यादातर पर अच्छी तरह से काम किया, लेकिन वास्तव में बड़े लोगों पर (~ 750 पंक्तियों x 80 कॉलम, सूत्रों के साथ लगभग सभी कोशिकाओं), यह बस नहीं करता है।
यहाँ कोड के एक उद्धरण:
'Reset page breaks
.ResetAllPageBreaks
'Set minimum acceptable zoom factor
Application.PrintCommunication = False 'This is the ugly workaround
.PageSetup.Zoom = 60
Application.PrintCommunication = True
MsgBox "Zoom = " & .PageSetup.Zoom 'Only for debugging
'Calculate the number of pages in width
Application.PrintCommunication = False
NPagesWide = .VPageBreaks.Count + 1
Application.PrintCommunication = True
MsgBox "NPagesWide = " & NPagesWide
'Find the higher zoom factor that can fit that number of pages
Application.PrintCommunication = False
.PageSetup.Zoom = 100
Application.PrintCommunication = True
Do While .VPageBreaks.Count > NPagesWide - 1
Application.PrintCommunication = False
.PageSetup.Zoom = .PageSetup.Zoom - 5
Application.PrintCommunication = True
Loop
MsgBox "Zoom = " & .PageSetup.Zoom
'Set average width per page and initialize column pointer
If HasTitleColumns Then 'Defined earlier
PageWidth = (PrintArea.Width + TitleColumns.Width * (NPagesWide - 1))/NPagesWide
j = TitleColumns.Columns(TitleColumns.Columns.Count).Column + 1
Else
PageWidth = PrintArea.Width/NPagesWide
j = 1
End If
'Cycle vertical page breaks
For i = 1 To NPagesWide - 1
'Set width of TitleColumns
If HasTitleColumns Then
CumulWidth = TitleColumns.Width
Else
CumulWidth = 0
End If
'Cumulate columns width until the available page width
Do While CumulWidth + .Columns(j).Width <= PageWidth
CumulWidth = CumulWidth + .Columns(j).Width
j = j + 1
Loop
'Add the break
.VPageBreaks.Add .Columns(j + 1)
Next i
कोई भी विचार क्यों ऐसा होता है, और मैं इसे कैसे हल कर सकते हैं?
धन्यवाद,
कोई विचार? किसी भी आलोचना की सराहना की जाएगी! – Edgard
क्या आपने उस लाइन के बाद 'DoEvents' जोड़ने का प्रयास किया था जहां आप ज़ूम बदलते हैं? आम तौर पर मैं इसकी अनुशंसा नहीं करता हूं, लेकिन इन मामलों में ऐसा लगता है कि अगली कमांड लेने से पहले कार्रवाई पूरी नहीं हुई है, इससे मुझे कुछ असफल रहस्यों से बाहर खींच लिया गया। अगर यह काम करता है तो मैं इसे एक उत्तर में बना सकता हूं। – ib11