Notifications
Clear all

Selecionar área de impressão com formula

6 Posts
2 Usuários
0 Reactions
1,305 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde galera,

Tenho uma planilha que quero selecionar a impressão dela entre as colunas "A2:AJ" e as linhas são variáveis.
dei uma pesquisada no fórum e achei algumas soluções mas não resolveram muito.

a planilha tem 4500 linhas com formula quando mando selecionar a impressão com essa formula ela seleciona todos as celulas inclusive as que estão em branco por conta da celula

Sub selec_inp()

Dim PG As Worksheet
Dim rLast As Long
Dim cLast As Long

Set PG = ("Protocolo Geral")

        rLast = PG.Cells(Rows.Count, "C").End(xlUp).Row
        cLast = PG.Cells(2, Columns.Count).End(x1toleft).Column
                

Queria uma formula para evitar de selecionar quando for 0 ou "" pegando só a área com valor visível

Desde já agradeço

 
Postado : 08/02/2012 10:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

ptk, se ao se referir em Celulas em Branco como todas as celulas na Linha, pode-se utilizar o AutoFiltro e ocultar as celulas em branco, e depois utilizar a rotina abaixo para setar a área de impressão só coma as visiveis:

    Sub AjustarPrintArea()
        Dim i
       
        i = 0
       
        Set r = ActiveSheet.UsedRange
       
        nLastRow = r.Rows.Count + r.Row - 1
        nFirstRow = r.Row
       
        For n = nFirstRow To nLastRow
            If Cells(n, "A").EntireRow.Hidden Then
           
            Else
                i = i + 1
            End If
           
        Next
       
        ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=Cells(n, "A")

    End Sub

[]s

 
Postado : 08/02/2012 10:44 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Não consegui usar por alguns motivos "eu acho"

Antes de imprimir eu executo uma macro de classificar o resultado que quero puxando de uma base de dados
e também tenho informações nessa "mascara de protocolo"

Não sei dizer porque não funcionou ao certo, mas não funcionou rs

segue a planilha para melhor identificar o problema

Acho que assim fica melhor =)

 
Postado : 08/02/2012 1:08 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

ptk, como o arquivo é um pouco grande e as alterações serão poucas, vou passar somente o que deve alterar :

Na Aba "Protocolo Geral", na Coluna "B", de B2 até B4500, altere todas as formulas conforme abaixo :
De :
=SE(F11=0;0;SE(OU(C11<>0;J11<>0);B10+1;0))
Para
=SE(F11=0;"";SE(OU(C11<>0;J11<>0);B10+1;0))

Ou seja, Somente Troque o "ZERO" pelas ASPAS, faça esta troca sómente nas formulas da coluna citada, até a B4500.

Depois execute a rotina abaixo, e veja se é o resultado esperado.

Sub AjustarPrintArea2()
    
    Dim lastRow As Long
    Dim cell As Object, lngLastRow As Long
    
    'Armazena a Ultima celula
    lastRow = Range("B" & Rows.Count).End(xlUp).Row
        
        For Each cell In ActiveSheet.Range("B2" & ":" & "B" & lastRow)
            ' Conta as Celulas diferentes de Nulas (empty) desconsiderando as formulas
            If Not IsNull(cell.Value) And Len(Trim(cell.Value)) > 0 Then _
                lngLastRow = cell.Row
        Next cell
        
    'Redefine Area e Impressão
    With ActiveSheet.PageSetup
        .PrintArea = "$B$2:$J$" & lngLastRow
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    
    ActiveSheet.PrintPreview

End Sub

[]s

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

Mais que perfeito =)

Muito obrigado mais uma vez.

Tu devia ter um site de curso de VBA =D
Sou aluno em potencial rs

 
Postado : 09/02/2012 9:34 am
(@albraz)
Posts: 0
New Member
 

Mauro,

Vi a solução dada para o problema, testei e funcionou perfeitamente. Se na área de impressão eu precisar variar tanto a quantidade de linhas (como foi o exemplo) como também a quantidade de colunas. Como ficaria a instrução?

Obrigado

Albraz

 
Postado : 03/11/2015 10:07 pm