Notifications
Clear all

Macro Data

4 Posts
2 Usuários
0 Reactions
1,118 Visualizações
(@bruno1214)
Posts: 31
Eminent Member
Topic starter
 

Boa tarde Amigos!

Preciso da ajuda de vocês, aqui na empresa, usamos uma planilha(segue em anexo) para fazer o monitoramento dos caminhões. Depois que termino de preencher, clico em "PDF" e ele me gera o arquivo do "Range" que eu tinha definido, porem surgiu um problema: Eu preciso que me gere o PDF a partir da "Data In:" e "Data Fi:", ou seja, eu digitei na planilha os dias 1,2,3,4,5,6,7,8,9,10, porem, eu só irei precisar gerar o PDF do dia 1 ao dia 4 então, no "Data In:" irei digitar 01/05/2015, e no "Data Fi:" irei digitar do dia 04/05/2015, qual forma de fazer isto?

Segue também abaixo, o code que uso para gerar o PDF:

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$3:$P$" & UltimaLinha).Address
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0)
        .BottomMargin = Application.InchesToPoints(0)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        .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 = "Monitoramento"
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
        


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
 
Postado : 18/05/2015 12:16 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

bruno1214,

Boa Tarde!

Uma das formas de fazer o que você quer é você colocar, antes do código que grava a área de impressão que você quer, um inputbox perguntando a Data de Início e um outro perguntando a Data Final do range a ser impresso. Você pode também criar um formulário com dois controles de data (para evitar erros de data do usuário) e chamar esse formulário assim que pressionar no botão ajuste da planilha.

Feito isso, ao invés de usar:

UltimaLinha = Cells(Rows.Count, 2).End(xlUp).Row

Que, atualmente, serve para você pegar a última linha da área a ser impressa, você deve criar duas variáveis para armazenar as datas dos controles de data do formulário ou as fornecidas pelos comandos inputbox.

Depois, você deve gravar no gravador de macros, os comandos necessários para limpar qualquer área de impressão que já exista.

Finalmente, ao invés de usar a informação que pega todas as linhas do range a ser impresso, como está nesta linha:

ActiveSheet.PageSetup.PrintArea = Range("$A$3:$P$" & UltimaLinha).Address

Você deve substituir pela faixa de células que você quer imprimir, utilizando-se das datas armazenadas nas variáveis. Por exemplo, se você armazenou a data inicial numa variável chamada DataIn e a data final numa variável chamada DataFim, você poderia fazer assim:

ActiveSheet.PageSetup.PrintArea = Range("$A$" & DataIn & ":$P$" & DataFim).Address

O resto é tudo igual.

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 : 18/05/2015 2:04 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

bruno1214,

Veja, abaixo, um pequeno arquivo, onde você pode carregar um formulário e definir a área de impressão que quiser. Quando o formulário é carregado, a área de impressão que tiver é limpa.

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 : 18/05/2015 2:09 pm
(@bruno1214)
Posts: 31
Eminent Member
Topic starter
 

Wagner, boa tarde!

Obrigado pelo seu retorno.

Sou meio leigo em VBA, não entendi o que devo alterar na sua 1ª resposta

"Feito isso, ao invés de usar:
CÓDIGO: SELECIONAR TODOS
UltimaLinha = Cells(Rows.Count, 2).End(xlUp).Row

Que, atualmente, serve para você pegar a última linha da área a ser impressa, você deve criar duas variáveis para armazenar as datas dos controles de data do formulário ou as fornecidas pelos comandos inputbox.

Depois, você deve gravar no gravador de macros, os comandos necessários para limpar qualquer área de impressão que já exista."

Como devo criar as variáveis?

Aguardo

 
Postado : 18/05/2015 2:25 pm