Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Luan Valle

Excel Macro que imprime somente até onde tem preenchimento

Recommended Posts

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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Luan Valle Eu apenas lhe dei a base, não a solução definitiva, por isso parou...

 

Upe uma copia da sua planilha para eu lhe ajudar. 

Pode ser uma planilha sem dados, desde que tenha os códigos que necessitam de ajustes e uma pagina capaz de simular sua situação.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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?

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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.

 

 

Editado por Erik Wesley

Compartilhar este post


Link para o post
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.
 

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Luan Valle O arquivo esta corrompido. Eu testei tb

Teste o codigo que postei acima

 

Ja que nas imagens nao é possivel ver em que coluna inicia seus dados 

Editado por CasaDoHardware

Compartilhar este post


Link para o post
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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×