Ir ao conteúdo
  • Cadastre-se

Excel Macro que imprime somente até onde tem preenchimento


Posts recomendados

Galera, bom dia!

 

Aprendi muito sobre VBA e macros pela internet pois precisei fazer um caixa para clientes do meu escritório de contabilidade. Desde então quebrei muito a cabeça pra desenvolver algo simples e objetivo para os clientes não terem dúvidas e para os espertinhos também não copiarem. Mas não vem ao caso agora.

 

Preciso de uma macro (inlcusive já pesquisei em vários fóruns e não encontrei) que faça com que a impressão da página vá somente até onde há preenchimento nas colunas B até E. Há preenchimento até a coluna M e o cabeçalho está fixo na impressão. A partir da coluna F preciso que seja impresso e somente entre as colunas B e E que devem ser diferentes. Porquê?

 

A planilha é protegida e o usuário consegue selecionar e preencher somente de B5:E100. O usuário também não tem acesso as guias, usa o Excel como "Tela Inteira" e só imprime via botão com macro atribuída. Fixei em 100 lançamentos e todas essas células estão com as linhas já pretas, porém se houver apenas 4 linhas preenchidas, a impressão sái com páginas em branco desnecessárias, provavelmente porque o botão de imprimir que consegui é como se fosse a "Impressão rápida".

 

Anexei uma página da planilha para entenderem sem macros.

 

image.thumb.png.eba3bcd96fdd31c093b5bf76acec585e.png

image.thumb.png.45244a9fdb9d4f2e1e2322c2984888dd.png

Caixa.xlsx

Link para o comentário
Compartilhar em outros sites

Já que você tem conhecimento suficiente será mais simples.

Você pode utilizar um simples "Do Loop"

 

Do
If ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell.Value

 

Utilize uma referencia de linha (De sua preferência) para marcar o inicio e o fim da impressão, então utilize o:

 

ActiveSheet.PageSetup.PrintArea = Referencia (Range de impressão)

para marcar a impressão. Depois é só usar um macro de impressão de sua preferência também.

Link para o comentário
Compartilhar em outros sites

@Erik Wesley Como já tinha a referência de linha, colei o código do loop atrás dela. E o Excel parou de funcionar, miseravelmente hehehe. Fiz algo errado ?

 

Estou quase decidindo dar a opção do usuário escolher se quer usar a planilha em tela cheia, assim ele escolhe manualmente a quantidade de páginas que quer imprimir até onde há lançamentos.

Link para o comentário
Compartilhar em outros sites

@Erik Wesley Não tem problema quanto a isso. Anexei um arquivo com alguns lançamentos.

 

Não estou conseguindo colocar aqui, disponibilizei um link para download.

 

https://mega.nz/#!TNRSSaTL!m5b22AYaYO1TSTMkUhCbbdA0kyzDGOGpmnxVh8TjiU0

adicionado 4 minutos depois

Nas páginas de Entradas e Saídas ainda não adicionei o botão Imprimir, somente nos relatórios. Até então instruí para que teclassem CTRL+P e escolhessem o número de páginas.

adicionado 8 minutos depois

Como .rar vai né... ¬¬

Caixa Macros.rar

Link para o comentário
Compartilhar em outros sites

@Luan Valle Ok. vamos por parte.

 

Entrei em Janeiro - Entrada.

Dei o Ctrl + P = Nada.

Fui direto no VBA e ativei manualmente a impressão, ele me mostrou a folha e só. Ao sair me disse "Impresso". 

 

O que deseja fazer? Quer que apareça apenas o que está preenchido dentro dessa folha exemplo?

Ou que apareça apenas até onde a tabela existe?

Link para o comentário
Compartilhar em outros sites

Depois de finalizado esse código colocaria um botão de imprimir em Entradas de Janeiro. 

 

Se você for em Entradas de Junho vai ver que tem alguns dados preenchidos até a linha 34. O máximo de lançamentos permitidos vai até a linha 100, só que ao imprimir, o usuário acaba imprimindo mais que a linha 34.

 

Pode parecer estranho, mas as pessoas com quem trato essas informações não tem um pingo de noção de informática, e quanto mais facilitar a vida delas, melhor.

Link para o comentário
Compartilhar em outros sites

@Erik Wesley Estava aqui pensando em uma outra forma. Há possibilidade do Excel pintar a grade da última linha de preto enquanto o usuário faz os lançamentos na penúltima linha?

 

Por exemplo, a partir do momento que lanço a linha B5 até E5, após a E5 ser preenchida, a linha debaixo, B6:E6 fique com a grade preta.

 

Assim, ao imprimir, vai ter somente até onde o usuário lançou. Seria uma forma mais fácil.

Link para o comentário
Compartilhar em outros sites

@Luan Valle Mas iria gastar muita tinta. Vou ver o que posso fazer, aguenta um pouquinho só...

adicionado 28 minutos depois

@Luan Valle Veja só:

 

Sub Imprimir()

MsgBox "Selecione o número de páginas que deseja imprimir na próxima janela", vbInformation, "Atenção!"

Dim uLin As Long
Dim Area As String
Dim Ref As Double

uLin = Application.WorksheetFunction.Count(ActiveSheet.Range("b4:b100"))

ActiveSheet.Select

Ref = 4 + uLin

If Ref < 28 Then
Area = "A1:N28"
Else
Area = "A1:N" & Ref
End If

ActiveSheet.PageSetup.PrintArea = Area
Application.Dialogs(xlDialogPrintPreview).Show
'ActiveWindow.SelectedSheets.Print copies:=1
MsgBox "Impresso!", vbInformation, "Sucesso"

End Sub

Cole no lugar da Impressão.

 

PS: Ele seleciona como base a data. Então, ele ira selecionar até a última data preenchida para impressão.

 

PS2: Nos casos onde há poucos registros, como em agosto, ele iria selecionar até o último preenchimento, fazendo com que as assinaturas não saíssem na impressão, e como a planilha está bloqueada não consegui colocar uma condicional para sair as assinaturas e retirar o excesso de linhas (somente na impressão), nesses casos ele vai priorizar as assinaturas, então mesmo que você queira imprimir apenas 1 registro, ele ira selecionar toda a tabela correspondente até o fim das assinaturas e a data.

 

 

Link para o comentário
Compartilhar em outros sites

como os links estão corrompidos 

 

tente ajustar esse codigo.

 

sub imprimir()

dim w as worksheet
dim lr as long

w = sheets("plan1") ' troque pelo nome da sua planilha.
lr = w.range("b" & rows.count).end(xlup).row 'troque b pela coluna que tiver maior quantidade de dados.

'troque "b1:f" pela primeira celula que quiser imprimir e pala ultima coluna

w.range("b1:f" & lr).printout

end sub


é so copiar e colar em um modulo e associar a um botao.
 

Link para o comentário
Compartilhar em outros sites

@Erik Wesley Vou usar aqui e vou dar a resposta agora agora, só um momento...

@CasaDoHardware O link que disponibilizei foi antes de upar por aqui, pois não sabia que podia ser zipado. Daí desativei o link. Sorry! Mas ele continua aqui no tópico. Inclusive testarei também e retornarei aqui.

Link para o comentário
Compartilhar em outros sites

@Erik Wesley Mano, muitíssimo obrigado. Era exatamente o que eu precisava. Obrigado de verdade!

 

Percebi que só o primeiro MsgBox não era nem necessário, pois o código por si só já faz imprimir apenas a quantidade de folhas necessárias.

 

Mesmo assim, agradecido!

 

Obrigado também @CasaDoHardware pela disposição e ajuda. Quebraram uma árvore inteira hehe.

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!