मैं यह साफ करने की कोशिश कर रहा हूं कि मेरे वर्कशीट पर स्वचालित क्षैतिज पृष्ठ कैसे टूटते हैं। यदि कॉलम 'डी' में "समग्र स्थिति" वाक्यांश से स्वचालित पृष्ठ विराम नहीं टूटता है तो मैं "समग्र स्थिति" के नीचे अगले निकटतम क्षैतिज पृष्ठ विराम को ऊपर ले जाना चाहता हूं। नीचे एक कोड स्निपेट है जो कॉलम D में "समग्र स्थिति" कहने वाली सभी पंक्तियों के ऊपर एक क्षैतिज पृष्ठ विराम रखता है, लेकिन यह बहुत अधिक पृष्ठ विराम है।

Sub Pagebreak()
'adds horizontal pagebreak before every 'Overall Status'

Dim Search As String

Search = "Overall Status"

With ActiveSheet.UsedRange
    Set c = .Find(What:=Search, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
    If Not c Is Nothing Then
        FirstAddress = c.Address
        Do
            ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=c
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> FirstAddress
    End If

    'Then try toggle between pagebreak screen and normal view
    End With
End Sub

नीचे दिए गए कोड का स्निपेट दिखाता है कि मौजूदा क्षैतिज पृष्ठ विराम वर्तमान में कहां पड़ता है:

Sub HPageBreakTest()
'counts and shows where horizontal pagebreaks are
Dim pgeBreak As HPageBreak

With ActiveSheet
.Cells(65536, 1).Select
MsgBox .HPageBreaks.Count & " Horizontal page breaks counted"
For Each pgeBreak In .HPageBreaks
MsgBox "pgbreak at row: " & pgeBreak.Location.row
.Cells(65536, 1).Select
Next pgeBreak
.Cells(1, 1).Select
End With

End Sub

मैं यह पता लगाना चाहता हूं कि मैं इन दो कोड स्निपेट के तर्क को कैसे जोड़ सकता हूं, (1) "समग्र स्थिति" के नीचे पहले स्वचालित क्षैतिज पृष्ठ विराम का पता लगाएं और (2) उस पृष्ठ को "समग्र स्थिति" वाक्यांश के ठीक ऊपर ले जाएं कॉलम डी में। "समग्र स्थिति" के प्रत्येक उदाहरण के लिए क्षैतिज पृष्ठ विराम नहीं। मुझे आशा है कि मेरा प्रश्न समझ में आता है। आपकी सहायता के लिए अग्रिम धन्यवाद।

0
XLmatters 19 जुलाई 2017, 17:13

2 जवाब

सबसे बढ़िया उत्तर

आह, मेरा सुझाया गया परिवर्तन पहले प्राकृतिक पेजब्रेक से पहले "समग्र स्थिति" की पहली घटना पर एक पृष्ठ विराम सम्मिलित करेगा। आप पृष्ठ विराम से पहले अंतिम घटना से पहले सम्मिलित करना चाहते हैं। जटिलता यह है कि जैसे ही आप मैन्युअल पेज ब्रेक दर्ज करते हैं, अन्य सभी ब्रेक बदल जाते हैं। तो अंतिम घटना को खोजने के लिए पहले पृष्ठ की सीमा के माध्यम से लूप करें अन्य सभी पृष्ठों के लिए पेज ब्रेक दोहराएं

किसी पृष्ठ n के लिए स्तंभ D में श्रेणी अंतिम पृष्ठ विराम +1 की पंक्ति द्वारा अगले पृष्ठ विराम की पंक्ति में दी जाती है, इसलिए

 Dim Search As String
 Search = "Overall Status"
 Dim x as long
 Dim r as range
 dim lastrow as long

 with activesheet
     do while x < .hpagebreaks.count
           for each r in range("D" & (lastrow+1) & ":D" & .HPageBreaks(x+1).Location.Row)
              if r = search then     'might have found it
                  lastrow = r.row  'so remember the row number
              end if
           next r
           if lastrow = 0 then exit sub  'no find  
           .hpagebreaks.add before:=range("A" & lastrow)

           x = x +1
      loop
 end with
2
Harassed Dad 24 जुलाई 2017, 16:44

बदलने के

 With ActiveSheet.UsedRange

साथ

 With Activesheet.range("D1:D" & HPageBreaks(1).Location.Row)

(ध्यान दें कि यह मानता है कि कम से कम एक पेजब्रेक है)

0
Harassed Dad 19 जुलाई 2017, 18:40