Notifications
Clear all

Definir área de impressão da planilha

14 Posts
3 Usuários
0 Reactions
6,934 Visualizações
(@ceos005)
Posts: 49
Trusted Member
Topic starter
 

Olá pessoal

Alguém sabe como definir a área de impressão de uma determinada planilha através do VBA, por exemplo, Colunas A até M e Linhas 1 até a primeira linha onde a célua da coluna "B" estiver vazia.
Não sei se fui claro, mas quero que verifique a coluna B e por exemplo, se a célula B123 estiver vazia, quero que a área de impressão abranja o intervalo "A1:M122".

Obrigado.

 
Postado : 08/08/2012 10:46 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde,

Veja se atende:

Sub DefinirAreaImpressao()
    Dim UltimaLinha As Long
    
    UltimaLinha = Cells(Rows.Count, "B").End(xlUp).Row
    ActiveSheet.PageSetup.PrintArea = Range("A1:M" & UltimaLinha)
End Sub

abraço

 
Postado : 08/08/2012 10:56 am
(@ceos005)
Posts: 49
Trusted Member
Topic starter
 

Oi JValq, funcionou bem.
Agora precisava adequar ao código abaixo para definir a área e salvar em pdf, será que existe a possibilidade?

'Gera arquivo em PDF
Private Sub CommandButtonPDF_Click()
Dim SvInput As String
Dim Data As String
Dim var_MENSAGEM
Dim Nome As String
Nome = InputBox("Digite o nome para o relatório", "Gerar Relatório PDF")
Data = VBA.Format(VBA.Date, "dd-mm-yyyy")
SvInput = ThisWorkbook.Path & Application.PathSeparator & Nome & "_" & Data & ".pdf"
        With ActiveWorkbook.Worksheets(ws)
            .ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=SvInput, _
                OpenAfterPublish:=True
        End With
End Sub
 
Postado : 08/08/2012 11:44 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde,

Veja se atende:

'Gera arquivo em PDF
Private Sub CommandButtonPDF_Click()
Dim SvInput As String
Dim Data As String
Dim var_MENSAGEM
Dim Nome As String
Dim UltimaLinha As Long
    
UltimaLinha = Cells(Rows.Count, "B").End(xlUp).Row
ActiveSheet.PageSetup.PrintArea = Range("$A$1:$M$" & UltimaLinha).Address

Nome = InputBox("Digite o nome para o relatório", "Gerar Relatório PDF")
Data = VBA.Format(VBA.Date, "dd-mm-yyyy")
SvInput = ThisWorkbook.Path & Application.PathSeparator & Nome & "_" & Data & ".pdf"
        With ActiveSheet
            .ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=SvInput, _
                OpenAfterPublish:=True
        End With
End Sub

Alterei o código para imprimir a planilha ativa em vez de "ws".

Abraço

 
Postado : 10/08/2012 10:58 am
(@ceos005)
Posts: 49
Trusted Member
Topic starter
 

OK, vou testar mas eu utilizo "ws" porque isso pode ser feito com várias planilhas e "ws" indica a planilha selecionada.

 
Postado : 10/08/2012 1:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Da maneira que está o código é só substituir a linha, novamente, e utilizar o "ws".

Abraço

 
Postado : 10/08/2012 4:45 pm
(@felipesalomao)
Posts: 103
Estimable Member
 

Boa tarde,

Veja se atende:

'Gera arquivo em PDF
Private Sub CommandButtonPDF_Click()
Dim SvInput As String
Dim Data As String
Dim var_MENSAGEM
Dim Nome As String
Dim UltimaLinha As Long
    
UltimaLinha = Cells(Rows.Count, "B").End(xlUp).Row
ActiveSheet.PageSetup.PrintArea = Range("$A$1:$M$" & UltimaLinha).Address

Nome = InputBox("Digite o nome para o relatório", "Gerar Relatório PDF")
Data = VBA.Format(VBA.Date, "dd-mm-yyyy")
SvInput = ThisWorkbook.Path & Application.PathSeparator & Nome & "_" & Data & ".pdf"
        With ActiveSheet
            .ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=SvInput, _
                OpenAfterPublish:=True
        End With
End Sub

Alterei o código para imprimir a planilha ativa em vez de "ws".

Abraço

Funcionou perfeitamente, só fiz algumas adaptações.

Segue arquivo que estou tentando salvar. Tudo funciona, porém está salvando 4 páginas e só tenho conteudo para preencher 2 paginas, não sei porque está criando 2 páginas em branco.

Alguem consegue me ajudar o que está errado no código ?

Vlw

 
Postado : 14/08/2012 7:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Vc fixou sua range até coluna P, que "extrapola" o tamanho da pagina, por isso das 2 paginas adicionais.
Aqui, ainda alterei as margens para: Superior =0,9, Inferior=0,9, esquerda=1,6; assim ficou com as duas paginas.
ou pode adaptar/incluir essa configuração no codigo (creio que irá funcionar OK):

Sub salvarpdf()
Dim SvInput As String
Dim Data As String
Dim var_MENSAGEM
Dim Nome As String
Dim UltimaLinha As Long
    
UltimaLinha = Cells(Rows.Count, 2).End(xlUp).Row

ActiveSheet.PageSetup.PrintArea = Range("$A$1:$P$" & UltimaLinha).Address
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.62992125984252)
        .RightMargin = Application.InchesToPoints(0.236220472440945)
        .TopMargin = Application.InchesToPoints(0.354330708661417)
        .BottomMargin = Application.InchesToPoints(0.354330708661417)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.31496062992126)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = False
        .PrintErrors = xlPrintErrorsDisplayed
    End With
Nome = "Order List"
Data = VBA.Format(VBA.Date, "dd-mm-yyyy")
SvInput = ThisWorkbook.Path & Application.PathSeparator & Nome & " - " & Data & ".pdf"
        With ActiveSheet
            .ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=SvInput, _
                OpenAfterPublish:=False
        End With
End Sub
 
Postado : 15/08/2012 6:28 am
(@felipesalomao)
Posts: 103
Estimable Member
 

Obrigado mesmo Reinaldo, ficou perfeito ainda pude ajustar as margens, muito bom !!!

Apenas uma resalva, que for utilizar o código:
excluir ou colocar ' na frete desse pedaço:

.LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""

a não ser que defina as margens.

Só um detalhe, não sei se você notou, mais quando ele gera o arquivo e vc está com esse arquivo pdf aberto, acaba gerando depuração do seguinte trecho:

.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=SvInput, _
                OpenAfterPublish:=False

Será que ao invés de depurar tem como abrir uma janela avisando: erro - feche o arquivo x para poder salvar ?

Vlw

 
Postado : 15/08/2012 11:27 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Segue uma possibilidade, veja no anexo

 
Postado : 15/08/2012 12:53 pm
(@felipesalomao)
Posts: 103
Estimable Member
 

Obrigado pelo código, não consegui fazer funcionar não, percebi que ele está fora do código que gera o pdf, tem que adaptar algo ?

Outra coisa, que deve ser simples, após fazer os códigos começou aparecer na minha planilha um pontilhado que acredito que seja a margem de impressão, tem como ocultar, acaba estragando o visual pois minha planilha funciona como se fosse um software sem qualquer vestígio do excel..

Segue imagem em anexo.

Abs

 
Postado : 15/08/2012 1:26 pm
(@felipesalomao)
Posts: 103
Estimable Member
 

Consegui resolver o problema das linhas pontilhadas, bastou adicionar

PrintArea = False

 
Postado : 15/08/2012 2:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom que conseguiu achar a resposta para as linhas "pontilhadas".
Agora qto ao codigo o que não funcionou???
E preciso que a função Isfileopen esteja no projeto (mesmo modulo ou em outro).
e "ajustar" o trecho logo apos a definição do nome e caminho do arquivo a ser salvo :

    SvInput = ThisWorkbook.Path & Application.PathSeparator & Nome & " - " & Data & ".pdf"
    If IsFileOpen(SvInput) Then
        MsgBox "Arquivo está em uso!", vbOKOnly
        Exit Sub
    Else
        GoTo sPDF
    End If
sPDF:
 
Postado : 15/08/2012 4:26 pm
(@felipesalomao)
Posts: 103
Estimable Member
 

Bom que conseguiu achar a resposta para as linhas "pontilhadas".
Agora qto ao codigo o que não funcionou???
E preciso que a função Isfileopen esteja no projeto (mesmo modulo ou em outro).
e "ajustar" o trecho logo apos a definição do nome e caminho do arquivo a ser salvo :

    SvInput = ThisWorkbook.Path & Application.PathSeparator & Nome & " - " & Data & ".pdf"
    If IsFileOpen(SvInput) Then
        MsgBox "Arquivo está em uso!", vbOKOnly
        Exit Sub
    Else
        GoTo sPDF
    End If
sPDF:

Obrigado mais uma vez pela resposta, agora, consegui resolver o problema definitivamente, usei a seguinte solução:

On Error Resume Next
            .ExportAsFixedFormat _
                Type:=xlTypePDF, _
                filename:=SvInput, _
                OpenAfterPublish:=False
                On Error GoTo 0

Ou seja caso dê erro vai ignorar e seguir em frente. Meu código salva da seguinte forma: Order list (variável numérica) - Data.pdf, como a variável numérica sempre muda quando aprova o pedido de 0001,0002.. não terei mais problemas. Estava dando erro nesse trecho final algumas vezes não sei porque, colocando o "On Error Resume Next (desativar verificação de erro)" e On Error GoTo 0 (Reativar verificação de erros) resolveu. Muito obrigado !!

 
Postado : 15/08/2012 6:49 pm