Notifications
Clear all

Filtrar, salvar com nome de células e imprimir em PDF

6 Posts
4 Usuários
0 Reactions
2,353 Visualizações
(@fjovanio)
Posts: 3
New Member
Topic starter
 

A macro abaixo falta um comando antes da linha de ActiveSheet.Export em pdf, pois colocar Sheets("nome da planilha").Select poderia resolver se fosse apenas uma planilha, mas a macro será usada em outras planilha que tem o mesmo padrão, mas de outras pessoas. Ex: ele Clica em Nov-17 (botão) e imprime o relatório de novembro correspondente à sua planilha. Esse mesmo botão está nas outras planilhas com o mesmo comando. E não queria fazer uma dezena de macros para fazer a impressão.
Ou seja a ideia é salvar numa pasta, com os nomes contidos na célula da planilha e os dados filtrados do mês correspondente, abrindo na tela a planilha ativa em pdf, que está salva com o nome e pasta indicados.

Sub FiltrarNov17()
'
' FiltrarNov Macro
'
    Range("a16").Select
    ActiveSheet.Range("$A$17:$h$500").AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(1, "11/30/2017")
        ActiveWorkbook.Save

    Dim nome As String

    nome = "V:PASSAGEM DE SERVIÇOPDF Ponto" & Range("A13") & " - " & Range("A1") & " - " & Range("I3") & ".pdf"
    ActiveSheet.Range("$A$17:$h$500").AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(1, "11/30/2017")
    
    'É aqui que falta o comando    
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nome, Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
        
End Sub
 
Postado : 02/12/2017 1:33 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

FJOVANIO,

Bom dia!

Seja muito bem vindo ao fórum.

Para aproveitar ao máximo o fórum e sempre manter o mesmo de forma organizada, sugiro ler os tópico da regras abaixo:
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

Quanto a sua dúvida, anexe, aqui mesmo no fórum, seu arquivo compactado com .ZIP pois assim ficará mais fácil ajudar.
Pela sua explicação, existe um modo bem prático de fazer isso. Isso é apenas uma das maneiras. Você pode, por exemplo, criar uma variável GLOBAL chamada NomeAba, dp tipo String, usar o evento WorkSheet_Activate de cada uma das abas e colocar na variável global criada o nome da aba que foi ativada. Depois, nesse mesmo código que você colocou aqui no fórum, basta você selecionar primeiro a aba que está ativa usando Sheets (NomeAba).Select e substituir no código todo que faz referência a aba fixa por NomeAba.

Mais um detalhe: quando colocar código VBA aqui no fórum, pedimos a gentileza de usar a ferramenta CODE que fica localizado no início da caixa de mensagens. Basta colocar o código entre CODE e /CODE.

Clique em EDITAR na sua mensagem e veja como usei a ferramenta CODE.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 02/12/2017 4:49 am
(@mprudencio)
Posts: 2749
Famed Member
 

Se o codigo funciona vc pode trocar o sheet("nome da planilha").select

por actvesheet

Se a pessoa ja vai selecionar incialmente a sua planilha isso deve funcionar.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 02/12/2017 12:44 pm
(@fjovanio)
Posts: 3
New Member
Topic starter
 

A dica foi muito importante. Coloquei "ActiveSheet.Select".
O código, conforme abaixo, resolveu o problema, porém, sendo a planilha com dados iniciais o pdf gera muitas páginas e aparece, inclusive as células vazias no filtro. Por enquanto coloquei no código: From:=1, To:=2, para resolver o problema. Queria que no filtro as células vazias não aparecessem, gerando um pdf só com as celulas preenchidas.

Sub FiltrarNov17()
'
' FiltrarNov Macro
'
    Range("a16").Select
    ActiveSheet.Range("$A$17:$h$500").AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(1, "11/30/2017")
    Selection.End(xlDown).Select '....vai até última linha preenchida
    ActiveWorkbook.Save

    Dim nome As String

    nome = "V:PASSAGEM DE SERVIÇOPDF Ponto" & Range("A3") & " - " & Range("A1") & " - " & Range("I3") & ".pdf"
            
        ActiveSheet.Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nome, From:=1, To:=2, Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
                   
End Sub
 
Postado : 03/12/2017 3:34 am
(@avgsantos)
Posts: 28
Eminent Member
 

Bom dia, Fjovanio

Utilize o código abaixo, veja se atende o seu problema, basta trocar as ranges conforme seu critério.

Sub Selecionar()
    Dim lRowLast As Long
    'Seleciona as colunas e linhas preenchidas
    lRowLast = WorksheetFunction.Max( _
      RowLast(Columns("A")), _
      RowLast(Columns("E")))
   
    Range("A1:E" & lRowLast).Select
End Sub

Function RowLast(rng As Range) As Long
    'Retorna o valor da última linha
    With rng
        On Error Resume Next
        RowLast = .Find(What:="*" _
          , After:=.Cells(1) _
          , SearchDirection:=xlPrevious _
          , SearchOrder:=xlByColumns _
          , LookIn:=xlFormulas).Row
        If RowLast = 0 Then RowLast = rng.Cells(1).Row
    End With
End Function

Sub DefineAreaImprimir()
    Dim UltimaLinha
    Dim P_Range
    
    UltimaLinha = Cells(Rows.Count, 1).End(xlUp).Row
    P_Range = "A1:E" & UltimaLinha
    ActiveSheet.PageSetup.PrintArea = P_Range
    
End Sub

avgsantos

 
Postado : 03/12/2017 9:56 am
(@fjovanio)
Posts: 3
New Member
Topic starter
 

Caro avgsantos,

Como usarei o código que você indicou, levando em conta, ou não, no que estou usando?

Obrigado

FJOVANIO

 
Postado : 05/12/2017 12:29 pm