Notifications
Clear all

Configurar area de impressão

16 Posts
2 Usuários
0 Reactions
3,693 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Só falta isto para terminar minha Planilha.

O nome da planilha será variavel (Tenho uma macro que faz a cópia de uma plan existente e a renomeia ,dentro desta pasta posso ter varias plans "filhas" com nomes diferentes, todas terão um botão IMPRIMIR que é uma cópia do botão da plan "mãe",portanto se clicar no botão da plan "filha1" este botão terá de rodar o código e imprimir a plan "filha1" que é a plan ativa; clicar no botão da plan "filha2" este botão terá de rodar o código e imprimir a plan "filha2" e assim em diante ; o que preciso:

1-Nunca imprimir da linha 1 a linha 30 , que estará oculta na planilha.
2-Sempre imprimir como 1° pagina ,da linha 31 a linha 96 - A31:N96
3-Sempre imprimir como 2° pagina ,da linha 97 a linha 125 - A97:N125
4-Se apartir da linha 125 tiver alguma linha não vazia , configurar como próximas paginas, de 29 em 29 linhas até que todas as não vazias estejam como areas a serem impressas.

é possivel?

 
Postado : 06/05/2012 10:45 am
(@robert)
Posts: 561
Honorable Member
 

Boa tarde!

Ainda sou iniciante em Macros , mais veja se este tópico pode te ajudar ?

http://www.babooforum.com.br/forum/inde ... nilha-vba/

Att..

 
Postado : 06/05/2012 11:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Você pode definior as áreas a serem impressas determinando quebra de páginas, utilizar as rotinas de captura do range preenchido ou qual a última celula preenchida e criar variaveis para alimentar as quebras:

HPageBreaks Collection
http://msdn.microsoft.com/en-us/library ... 11%29.aspx

Setting Page breaks for variable amounts of data
http://www.ozgrid.com/Excel/excel-page-breaks.htm

[]s

 
Postado : 06/05/2012 1:16 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

trafix , o copiar e colar aqui já tá resolvido ,mas obrigado mesmo assim

 
Postado : 06/05/2012 1:58 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro , acredito que os links que me passou possam me ajudar mas os comentários estão todos em ingles e não entendo nada.
tentei no tradutor mas fica indecifravel.

 
Postado : 06/05/2012 2:00 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

O link do microsoft "HPageBreaks Collection"
A grosso modo:
"quebra de paginas Horizontais" (existem tambem as verticais); Automaticamente o excel cria essas "quebras", somente para area de impressão.
É possivel incluir quebras (num limite de 1026) mesmo fora da area de impressão, contudo estando fora da area de impressão não serão "consideradas" na Coleção de quebra de paginas.
Link do Ozgrid o codigo criado por Hans Pottel: (Já foi mencionado se não me engano, em outro post sobre a impressão de 50 em 50 linhas)
Obs.: Se já houver quebras de pagina no arquivo/area de impressão, serão acrescentadas novas e não substituidas as existentes.

Sub PrintAreaWithpageBreaks()
Dim pages As Integer 'Declaração da variavel pagina
Dim pageBegin As String 'Declaração da variavel inicio de pagina
Dim PrArea As String ' Declaração da area de impressão
Dim i As Integer
Dim q As Integer
Dim nRows As Integer, nPagebreaks As Integer
Dim R As Range
Set R = ActiveSheet.UsedRange ' Define range utilizada
'add pagebreak every 40 rows - Cria uma quebra de pagina a cada 40 linhas
nRows = R.Rows.Count ' Calcula quantas linhas tem a range utilizada
If nRows > 40 Then  'Somente se houver mais de 40 linhas adicina uma quebra
  nPagebreaks = Int(nRows / 40)
  For i = 1 To nPagebreaks '
     ActiveWindow.SelectedSheets.HPageBreaks.Add  Before:=R.Cells(40 * i + 1, 1)
  Next i
End If
'can be used in a separate macro, as I Start counting the number of pagebreaks
'Pode ser em uma macro separada, Começo contando o numero de quebras de paginas
pages = ActiveSheet.HPageBreaks.Count
pageBegin = "$A$1" 'Considera A1 como inicial
For i = 1 To pages
  If i > 1 Then pageBegin = ActiveSheet.HPageBreaks(i - 1).Location.Address
  q = ActiveSheet.HPageBreaks(i).Location.Row - 1
  PrArea = pageBegin & ":" & "$H$" & Trim$(Str$(q)) 'Determina Range de impressão de cada pagina Aqui vai até coluna H
  ActiveSheet.PageSetup.PrintArea = PrArea
  ' the cell in column 1 and in the row immediately below the pagebreak - A celula na coluna 1 na linha logo abaixo da quebra
  ' contains text for the footer - Contem o texto para o  rodape de impressão
  ActiveSheet.PageSetup.CenterFooter = Cells(q, 1)
'  ActiveSheet.PrintOut copies:=1
Next i
End Sub

Aqui um codigo do Alexel (ExcleBr - Yahoogroups) Verifica quantas quebras onde e de que tipo.

Sub fnTestHPageBreaks()
Dim objHPgBk As Excel.HPageBreak
Dim colHPgBk As Excel.HPageBreaks

Set colHPgBk = ActiveSheet.HPageBreaks

If Not colHPgBk Is Nothing Then

    MsgBox "Total de quebras horizontais úteis: " & colHPgBk.Count

    For Each objHPgBk In colHPgBk

        MsgBox "Existe uma quebra entre as linhas " & objHPgBk.Location.Row - 1 & " e " & objHPgBk.Location.Row & vbNewLine & _
        "Tipo desta quebra: " & IIf(objHPgBk.Type = xlPageBreakAutomatic, "Automática", IIf(objHPgBk.Type = xlPageBreakManual, "Manual", "Nenhuma"))

    Next

End If

End Sub
 
Postado : 06/05/2012 3:24 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Não to conseguindo adaptar; por favor se puderem dar uma olhada na planilha entenderão o que preciso.

 
Postado : 07/05/2012 8:30 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Acho que quanto mais to tentando explicar , mais to complicando , afinal todo mundo tá dizendo que é grego ; eu to entendendo como mandarim ai F....

Brincadeiras a parte agora acho que vai ficar mais simples

Sub AJUSTAR_PAGINAS()

' Y= ULTIMA LINHA PREENCHIDA
y = Range("A65536").End(xlUp).Row

'SE  A ULTIMA LINHA PREENCHIDA FOR 125 

If y = 125 Then

' DE $A$1:$M$31 NUNCA SERÁ IMPRESSO E ESTAS LINHAS ESTARÃO SEMPRE OCULTAS.
'De $A$32:$M$96 sempre será a pagina 1 e de $A$32:$M$125 sempre será a pagina 2.(nunca terá menos que estas duas paginas)

'IMPRIMIR COMO PAGINA 1 DE $A$32:$M$96
ActiveSheet.PageSetup.PrintArea = "$A$32:$M$96"

''IMPRIMIR COMO PAGINA 2 DE $A$32:$M$125'
ActiveSheet.PageSetup.PrintArea = "$A$32:$M$125"

End If

'SE  A ULTIMA LINHA PREENCHIDA FOR MAIOR QUE 125
If y > 125 Then

'IMPRIMIR COMO PAGINA 1 DE $A$32:$M$96
ActiveSheet.PageSetup.PrintArea = "$A$32:$M$96"

'IMPRIMIR COMO PAGINA 2 DE $A$32:$M$125
ActiveSheet.PageSetup.PrintArea = "$A$32:$M$125"

'NUMERO DE PAGINAS APÓS 125  ;  OS BLOCOS DE NOVAS PAGINAS SERÃO DE 29 LINHAS POR PAGINA
NumPaginasApos125 = (y - 125) / 29

'IMPRIMIR COMO PROXIMA PAGINA M125 + 29 (pois a ultima linha preenchida será a 125+29)

'E ASSIM POR DIANTE.
End If

End Sub
 
Postado : 08/05/2012 12:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Tentei adaptar veja se lhe atende:

Sub pgb2()
Dim FlsInicial As String
Dim i As Integer, q As Integer, nPagebreaks As Integer
Dim lCol As Integer, lRow As Integer, X As Integer
Application.ScreenUpdating = False
' Informação da ultima linha
    lRow = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.393700787401575)
        .RightMargin = Application.InchesToPoints(0.393700787401575)
        .TopMargin = Application.InchesToPoints(0.78740157480315)
        .BottomMargin = Application.InchesToPoints(0.78740157480315)
        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 80
        .FitToPagesWide = False
        .FitToPagesTall = False
        .PrintErrors = xlPrintErrorsDisplayed
    End With
'Define o endereço inicial da primeira pagina
    FlsInicial = "$A$31"
'Adiciona a primeira quebra de paginas na linha 96
    ActiveSheet.HPageBreaks.Add Before:=Cells(97, 1)
'Adiciona a segunda quebra de paginas na linha 125
    ActiveSheet.HPageBreaks.Add Before:=Cells(126, 1)
'Define o salto à partir da pagina 3
X = 29
If lRow > 125 Then
    nPagebreaks = Int((lRow - 126) / 29)
End If
For i = 1 To nPagebreaks - 2
        ActiveSheet.HPageBreaks.Add Before:=Cells(126 + ((X * i) + 1), 1)
Next i
i = 1
For i = 1 To nPagebreaks
    If i > 1 Then FlsInicial = ActiveSheet.HPageBreaks(i - 1).Location.Address
        q = ActiveSheet.HPageBreaks(i).Location.Row - 1
        PrArea = FlsInicial & ":" & "$N$" & Trim$(Str$(q))
'Se quiser "ver" onde estão as quebras (altere a plan2 e/ou a range
Sheets("Plan2").Range("A" & i) = "Página " & i & "/" & Fls
Sheets("Plan2").Range("B" & i) = PrArea
'ActiveSheet.PageSetup.PrintArea = PrArea
'A Celula na primeira coluna e na linha logo abaixo do pagebreak contem texto para o rodape
      'ActiveSheet.PageSetup.CenterFooter = Cells(q, 1)
'ActiveSheet.PrintOut copies:=1
Next i
End Sub

Caso deseje ou precise "limpar" as quebras adicionadas:

Sub DelHpgB()
Dim cHpgB As Excel.HPageBreaks, oHpgB As Excel.HPageBreak
On Error Resume Next
'Definindo a coleção quebra de paginas horizontais da planilha corrente
Set cHpgB = ActiveSheet.HPageBreaks
    For Each oHpgB In cHpgB
        oHpgB.Delete
    Next
End Sub
 
Postado : 08/05/2012 12:28 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo por favor, não consegui agora tá quebrando em no minimo 12 paginas

 
Postado : 08/05/2012 2:19 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Claudinei, não consigo abrir seu arquivo; estou temporariamente sem office 2007/2010, e ao tentar abrir no 2003 com o conversor dá um erro e não abre,
Se puder mande somente a sheet com os dados salvos em office 2003

 
Postado : 08/05/2012 5:26 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

1 minuto e já posto

 
Postado : 08/05/2012 5:29 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo
Tá ai o arquivo e antecipadamente lhe agradeço muito pela ajuda que está me dando.
É o mesmo arquivo porem converti para xls , testei aqui abrindo no 97-2003, funcionou legal

 
Postado : 08/05/2012 5:39 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

qualquer coisa estou no msn [email protected]

 
Postado : 08/05/2012 5:41 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Segue o arquivo. Veja se está ok

 
Postado : 09/05/2012 7:30 am
Página 1 / 2