Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#33982
Bom Dia Queridos.
Pesquisei aqui e achei varias respostas diferentes da que necessito.

Tenho uma tabela que atualizo com muita frequência. Só que as vezes uso apenas 10 linhas, em outras ocasiões 500 linhas.
Necessito de uma VBA que defina automaticamente pra mim a aréa de impressão, se por exemplo, eu tenho 22 linhas sendo utilizadas e a Célula C23 está vazia, que defina que a área de impressão deve ser de B1:N22, automaticamente.

Perco muito tempo definindo área de impressão. Já tenho um botão de impressão. Se definisse por conta ajustando ao texto que já está na planilha, me ajudaria muito.
#33984
Experimente:
Código: Selecionar todos
Sub ImprimePlan()
 Dim LR As Long
  With ActiveSheet
   LR = .Cells(Rows.Count, 2).End(3).Row
   .PageSetup.PrintArea = "B1:N" & LR
  .PrintOut
  End With
End Sub
#34068
Bom dia Osvaldo. Obrigado por sua resposta.

Em cima do seu código, fiz uma pequena modificação e cheguei mais ou menos onde desejava.
Código: Selecionar todos
Sub ImprimePlan()
     Dim Lr As Long
     With ActiveSheet
   Lr = .Cells(Rows.Count, 3).End(xlUp).Row     'define a ultima linha nao vazia
   Lr = IIf(Lr < 5, 5, Lr)
      .PageSetup.PrintArea = ("B1:N" & Lr)
     End With
End Sub
mas ainda, para que ele funcione, necessito acioná-lo, manualmente ou com um botão. Como faço pra que ele ocorra automaticamente quando uma determinada célula for modificada? Desde já, agradeço.
#34073
Spinhosay escreveu: Como faço pra que ele ocorra automaticamente quando uma determinada célula for modificada?
Qual seria essa "determinada célula" ? Considerei como sendo a célula A1, altere se necessário. E considerei que a "determinada célula" não contém fórmula.
O código abaixo deve ser instalado no módulo da planilha de interesse.
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address <> "$A$1" Then Exit Sub
 Me.PageSetup.PrintArea = "B1:N" & IIf(Cells(Rows.Count, 3).End(xlUp).Row < 5, 5, Cells(Rows.Count, 3).End(xlUp).Row)
End Sub
#34437
mprudencio escreveu:Eu usaria ao clicar de um botao.

Assim vc executa qdo tiver certeza que o arquivo esta pronto para ser impresso.
Bom Dia mprudencio.

Essa solução não me ajuda pois não pretendo imprimir o arquivo. Mas os usuários, quando forem imprimir, gostaria que a área de impressão estivesse pronta e definida automaticamente.
osvaldomp escreveu:Visão contraída
REVISÃO DO TÓPICO: MACRO PARA "DEFINIR ÁREA DE IMPRESSÃO" AUTOMATICAMENTE
Olá Osvaldomp

Não sei o que fiz errado. Mas não deu certo. Estou anexando a planilha.
Grato
Você não está autorizado a ver ou baixar esse anexo.
#34443
Coloca o codigo que define a area de impressao junto do seu codigo que efetivamente imprime o arquivo.

Aproveitando o codigo do Osvaldo eu usaria assim associado ao botao que vc ja usa para imprimir.
Código: Selecionar todos

Sub ImprimePlan()
     Dim Lr As Long
     With ActiveSheet
   Lr = .Cells(Rows.Count, 3).End(xlUp).Row     'define a ultima linha nao vazia  
      .range ("B1:N" & Lr).printout
     End With
End Sub

Não precisa definir a area de impressão basta informar o intervalo que deseja imprimir.
#34450
mprudencio escreveu:Coloca o codigo que define a area de impressao junto do seu codigo que efetivamente imprime o arquivo.

Aproveitando o codigo do Osvaldo eu usaria assim associado ao botao que vc ja usa para imprimir.
Código: Selecionar todos

Sub ImprimePlan()
     Dim Lr As Long
     With ActiveSheet
   Lr = .Cells(Rows.Count, 3).End(xlUp).Row     'define a ultima linha nao vazia  
      .range ("B1:N" & Lr).printout
     End With
End Sub

Não precisa definir a area de impressão basta informar o intervalo que deseja imprimir.

acho que não entendi.

Ficaria assim?
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 
 If Target.Address <> "$C$2" Then Exit Sub
 Me.PageSetup.PrintArea = "B1:N" & IIf(Cells(Rows.Count, 3).End(xlUp).Row < 5, 5, Cells(Rows.Count, 3).End(xlUp).Row)


Dim Lr As Long
     With ActiveSheet
   Lr = .Cells(Rows.Count, 3).End(xlUp).Row     'define a ultima linha nao vazia
   Lr = IIf(Lr < 5, 5, Lr)
      .PageSetup.PrintArea = ("B1:N" & Lr)
     End With

End Sub
#34471
Spinhosay escreveu: Não sei o que fiz errado. Mas não deu certo. Estou anexando a planilha.
Você não informou antes que trata-se de Tabela Excel, e o comando que passei para encontrar a última linha com dados não se aplica a Tabelas, por isso o erro. Experimente o código abaixo já alterado no lugar do anterior (no módulo da planilha, como você colocou o anterior).

obs. o segundo código que você colocou no módulo da planilha Sub ImprimePlan pode ser deletado.
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim LR As Long
 If Target.Address <> "$C$2" Then Exit Sub
 LR = Columns(3).Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
 If LR < 5 Then LR = 5
 Me.PageSetup.PrintArea = "B1:N" & LR
End Sub
#34472
osvaldomp escreveu:
Spinhosay escreveu: Não sei o que fiz errado. Mas não deu certo. Estou anexando a planilha.
Você não informou antes que trata-se de Tabela Excel, e o comando que passei para encontrar a última linha com dados não se aplica a Tabelas, por isso o erro. Experimente o código abaixo já alterado no lugar do anterior (no módulo da planilha, como você colocou o anterior).

obs. o segundo código que você colocou no módulo da planilha Sub ImprimePlan pode ser deletado.
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim LR As Long
 If Target.Address <> "$C$2" Then Exit Sub
 LR = Columns(3).Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
 If LR < 5 Then LR = 5
 Me.PageSetup.PrintArea = "B1:N" & LR
End Sub
Ola Osvaldo
Inseri seu código novamente, e mesmo convertendo em intervá-lo (desfazendo a tabela), quando dou Ctrl+P continua aparecendo mais de 40 páginas. Tentei limpar intervalo de impressão e modificar denovo a célula C2 para atualizar, mas não está aplicando a nova definição de área.

Estou quebrando a cabeça aqui... :lol: :lol:
Anexei novamente.

Obrigado mais uma vez.
Você não está autorizado a ver ou baixar esse anexo.
#34476
Inseri seu código novamente
Você inseriu o código em um módulo comum (Módulo1). Ele deve ser inserido no módulo da planilha, lembra disso? Após instalar o código no módulo da planilha, para testar selecione C2 / aperte F2 / em seguida aperte Enter

e mesmo convertendo em intervá-lo (desfazendo a tabela),
Utilizando o código que passei por último não é necessário desfazer o modo Tabela.

sugestão - não polua a tela do tópico, para responder clique em +Resposta localizado abaixo da última postagem, só clique em Responder com citação se necessário.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord