Views

Histats

Vitrine

VBA Excel - Inserindo quebra de páginas de acordo com o agrupamento.










Olá caros desenvolvedores. 


Talvez precisemos definir relatórios no MS Excel com quebras específicas de página, os quais, por vezes tenham dados oriundos de um BI (tal como da Microsoft, ORACLE, SAP, ou Cognos).


Insert Conditional Horizontal Page Breaks Around Logical/Visual Blocks

Clear Page Breaks & Add Page Breaks

Conditional Insert Of Page Breaks

Force Page Breaks In Vba?

Inserting Page Breaks On Relative Rows Based On Data

Set Page Breaks Based On Cell Value On Protected Sheet

Macro - Page Breaks/printing

Macro To Save Sheet With Same Page Breaks As Original

Vertical Page Breaks To Stretch From Column "B" To Column "U"

Page Breaks When Value Changes

Remove Any Page Breaks

Filter Out Page Breaks

Setting Page Breaks

Detecting Page Breaks

Macro To Loop And Insert A Page-break

Find Page Breaks Faster

Page Breaks Every Nth Row

Create Conditional Page Breaks

Row Height Specifically For Page Breaks

Adjusting Page Breaks In Multiple Tabs

Inserting Page Breaks For Certain Sheets Using Macros

Set Page Breaks Groups For X Conditions

Two Page Lookup Matching Criteria Based On Cell Value

Show Page Breaks Automatically When I Open A New File.

Deleting Page Breaks From Text File Formatted

Page Breaks Result In Blank Pages Printing When AutoFilter Used


Como podemos forçar as quebras quando acontecerem mudanças nas ocorrências de certos agrupamentos?


O código abaixo foi criado para aderir a uma necessidade específica, mas pode  ser [e deve ser] adaptado a ainda outras necessidades, criem e compartilhem!!!


Imaginem as ocorrências abaixo:


Nome           Estado                        e-mail

André           SP                              bernardess@gmail.com

André           SP                              bernardess@gmail.com

André           SP                              bernardess@gmail.com

André           SP                              bernardess@gmail.com

André           SP                              bernardess@gmail.com

André           SP                              bernardess@gmail.com

André           RJ                              bernardess@gmail.com

André           RJ                              bernardess@gmail.com

André           RJ                              bernardess@gmail.com

André           RJ                              bernardess@gmail.com

André           RJ                              bernardess@gmail.com

André           RJ                              bernardess@gmail.com

André           PR                              bernardess@gmail.com


Suponhamos que desejasse que em toda a mudança de estado, uma quebra fosse inserida. Como ficaria? Similar ao demonstrado abaixo:


Segue código:


Sub Insert_PageBreaks()

    ' Author:                           Date:                        Contact:                            URL:

    ' André Bernardes             08/07/2011 08:49    bernardess@gmail.com     http://al-bernardes.sites.uol.com.br/

    ' Insere quebra de página de acordo com a mudança em uma coluna.

    ' Listening: .


    Dim Lastrow As Long

    Dim i As Long

    Dim Row_Index As Long

    Dim Column1 As Long

    Dim Row1 As Long

    Dim cellContent1 As String

    Dim cellContent2 As String


    ' Define a coluna que será analisada.

    Let Column1 = 3

    

    ' Define a partir de qual Linha iniciará.

    Let Row1 = 3


    With ActiveSheet

        ' Remove todos os PageBreaks pré-existentes.

        .ResetAllPageBreaks

        

        ' Identifica a última linha que contém alguma informação. Neste caso na coluna C.

        Let Lastrow = .Cells(Rows.Count, "C").End(xlUp).Row


        ' Carrega variável de análise.

        Let cellContent1 = .Cells(Row1, Column1)

    

        ' Percorre todas as linhas com conteúdo na planilha vigente.

        For i = Row1 To Lastrow

            If Selection(i, Column1).Value <> cellContent1 Then

                .HPageBreaks.Add Before:=.Cells(i + 1, Column1)

                

                ' Carrega variável de análise.

                Let cellContent1 = .Cells(i + 1, Column1)

                

                Let i = i + 1

            End If

        Next

    End With

End Sub


Exemplo #1:

Use HPageBreaks(index), onde 

index

 é o número de índice da quebra de página, para retornar um objeto 

HPageBreak

. O exemplo a seguir altera a posição da quebra de página horizontal um.


Visual Basic for Applications 

Worksheets(1).HPageBreaks(1).Location = Worksheets(1).Range("e5") 


Exemplo #2:

Este exemplo adiciona uma quebra de página horizontal acima da célula F25 e insere uma quebra de página vertical à esquerda dessa célula.


Visual Basic for Applications 


With Worksheets(1)

    .HPageBreaks.Add.Range("F25")

    .VPageBreaks.Add .Range("F25")

End With 


Exemplo #3:

With Worksheets("Sheet3") 

    Set rngMyRange = .Range(.Range("B1"), .Range("B65536").End(xlUp)) 

    For Each rngCell In rngMyRange 

    ' Faz o loop através do range.

        If rngCell.Value <> rngCell.Offset(1, 0).Value Then 

            .HPageBreaks.Add Before:=rngCell.Offset(1, 0) 

        End If 

    Next 

End With 


Utilize-os com moderação... 



Tags: André Luiz Bernardes, Microsoft, Office, Excel, insert, page, brake, column, ResetAllPageBreaks, HPageBreaks, lastrow, row, cells, xlup


Inspiration: 

LinkWithinBrazilVBAExcelSpecialist

Related Posts Plugin for WordPress, Blogger...