Logo Hardware.com.br
ANTONIOLANIS
ANTONIOLANIS Novo Membro Registrado
24 Mensagens 0 Curtidas

[Resolvido] Verificação antes de imprimir

#1 Por ANTONIOLANIS 07/12/2015 - 12:50
Preciso fazer uma verificação em uma coluna (no caso a coluna B) antes que disparar uma macro. A verificação desta coluna precisa iniciar na linha 7 e verificar qual a última célula da coluna B contém um preenchimento. Havendo células preenchidas de B7 abaixo, então todas a linhas do intervalo da coluna B3 até F serão impressas, caso B7 abaixo estejam vazias exibe msg "não há dados a serem impressos"
Alguma ajuda, por favor.
Responder
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#2 Por Basole
07/12/2015 - 13:40
Segue um exemplo, cole o codigo em um modulo:
[code=vb]
Option Explicit

Sub Verif_Col_B_Imprime()
Dim Msg As Boolean
Dim rng As Range, c As Range
With ActiveSheet
Set rng = Range("B3:B7")
Set c = rng.Find("*")
Msg = IIf(Not c Is Nothing, True, False)
Select Case Msg
Case True
Range("B3:F7").PrintOut
Case False
MsgBox "Não há dados a serem impressos", 64, "Atenção"
End Select
End With
End Sub
[/code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
ANTONIOLANIS
ANTONIOLANIS Novo Membro Registrado
24 Mensagens 0 Curtidas
#3 Por ANTONIOLANIS
07/12/2015 - 13:52
Acho que não me fiz entender. Abaixo esta a macro para impressão, mas antes desejo que seja feita a verificação.
Espero ter ficado mais claro. Grato.

Sub Print_plan()
'Intervalo para impressão inicia em B3, mas só deve ser impresso se alguma célula da coluna B estiver preenchida
Range("b3:f" & Range("f" & Cells.Rows.Count).End(xlUp).Row).Select
Selection.PrintOut From:=1, To:=1, Copies:=1
Range("A7").Select
End Sub
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#4 Por Basole
07/12/2015 - 14:04
Bom, pelo que eu entendi voce quer que verifica se existem dados no intervalor [B3 a B7].
Caso tenha dados -> imprimir
Caso nao tenha... -> Mensagem
Se for isso, segue com alteração incluindo a chamada para sua macro:
[code=VB]
Option Explicit

Sub Verif_Col_B_Imprime()
Dim Msg As Boolean
Dim rng As Range, c As Range
With ActiveSheet
Set rng = Range("B3:B7")
Set c = rng.Find("*")
Msg = IIf(Not c IsNothing, True, False)
Select Case Msg
Case True
Call Print_plan ' *** Chama a sua Rotina de Impressão
Case False
MsgBox "Não há dados a serem impressos", 64, "Atenção"
End Select
End With
End Sub
[/code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Marcelo G Prudencio
Marcelo G Pr... Geek Registrado
1K Mensagens 227 Curtidas
#5 Por Marcelo G Pr...
07/12/2015 - 14:10
Imagino que a primeira linha a ser preenchida na sua planilha é a linha 7, logo entendo que se a celula B7 estiver vazia, não havera dados abaixo dessa linha.

Sendo assim o modelo a seguir atende a sua solicitação

O intervalo de impressão esta nomeado.

Anexos

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.
ANTONIOLANIS
ANTONIOLANIS Novo Membro Registrado
24 Mensagens 0 Curtidas
#6 Por ANTONIOLANIS
07/12/2015 - 14:24
Prudencio, a macro que sugere verifica somente a célula b7. A macro que tenho para impressão segue abaixo. Desejo que imprima somente até a última linha cuja célula da coluna B não esteja vazia. Tentei fazer a verificação por linha considerando a macro abaixo, mas se houver uma célula vazia na coluna F a macro imprime até a primeira célula acima preenchida (da coluna F) ignorando linhas abaixo.

Sub Print_plan()
'Intervalo para impressão inicia em B3, mas só deve ser impresso se alguma célula da coluna B estiver preenchida
Range("b3:f" & Range("f" & Cells.Rows.Count).End(xlUp).Row).Select
Selection.PrintOut From:=1, To:=1, Copies:=1
Range("A7").Select
End Sub
ANTONIOLANIS
ANTONIOLANIS Novo Membro Registrado
24 Mensagens 0 Curtidas
#7 Por ANTONIOLANIS
07/12/2015 - 14:25
Basole disse:
Bom, pelo que eu entendi voce quer que verifica se existem dados no intervalor [B3 a B7].
Caso tenha dados -> imprimir
Caso nao tenha... -> Mensagem
Se for isso, segue com alteração incluindo a chamada para sua macro:
[code=VB]
Option Explicit

Sub Verif_Col_B_Imprime()
Dim Msg As Boolean
Dim rng As Range, c As Range
With ActiveSheet
Set rng = Range("B3:B7")
Set c = rng.Find("*")
Msg = IIf(Not c IsNothing, True, False)
Select Case Msg
Case True
Call Print_plan ' *** Chama a sua Rotina de Impressão
Case False
MsgBox "Não há dados a serem impressos", 64, "Atenção"
End Select
End With
End Sub
[/code]


Na verdade tem que verificar e identificar a última célula preenchida na coluna B e imprimir até ela. A vem a pergunta: Se eu substituir Set rng = Range("B3:B7") por Set rng = Range("B7:B") eu consigo o resultado pretendido?
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#8 Por Basole
07/12/2015 - 14:46
Na verdade tem que verificar e identificar a última célula preenchida na coluna B e imprimir até ela. A vem a pergunta: Se eu substituir Set rng = Range("B3:B7") por Set rng = Range("B7:B") eu consigo o resultado pretendido?

Se voce substituir desta forma vai aparecer um 'error'. Voce tem que definir um intervalor valido. (B7 ate B + " " (nada)) ???
Veja se é isso:
Se na coluna B a partir da linha 7, tiver dados, então imprimir o intervalo de [ B3 até F + a ultima linha que tiver dados nas coluna B] .
Caso contrario: Aparecer a mensagem citada
[code=VB]
Sub Verif_Col_B_Imprime()
Dim Msg As Boolean
Dim rng As Range, c As Range
Dim Lr As Long
With ActiveSheet
Lr = .Cells(Rows.Count, 2).End(xlUp).Row 'define a ultima linha nao vazia
Set rng = Range("B7:B" & Lr)
Set c = rng.Find("*")
Msg = IIf(Not c Is Nothing, True, False)
Select Case Msg
Case True
Call Print_plan ' ** Chama sua Rotina que imprime
Case False
MsgBox "Não há dados a serem impressos", 64, "Atenção"
End Select
End With
End Sub

Sub Print_plan()
'Intervalo para impressão inicia em B3, mas só deve ser impresso se alguma célula da coluna B estiver preenchida
Dim Lr As Long
With ActiveSheet
Lr = .Cells(Rows.Count, 2).End(xlUp).Row 'define a ultima linha nao vazia
Lr = IIf(Lr < 3, 3, Lr) ' se Lr é menor que 3 define Lr com 3
.Range("B3:F" & Lr).Select
Selection.PrintOut From:=1, To:=1, Copies:=1
.Range("A7").Select
End With
End Sub

[/Code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
ANTONIOLANIS
ANTONIOLANIS Novo Membro Registrado
24 Mensagens 0 Curtidas
#9 Por ANTONIOLANIS
08/12/2015 - 00:40
Basole disse:
Se voce substituir desta forma vai aparecer um 'error'. Voce tem que definir um intervalor valido. (B7 ate B + " " (nada)) ???
Veja se é isso:
Se na coluna B a partir da linha 7, tiver dados, então imprimir o intervalo de [ B3 até F + a ultima linha que tiver dados nas coluna B] .
Caso contrario: Aparecer a mensagem citada
[code=VB]
Sub Verif_Col_B_Imprime()
Dim Msg As Boolean
Dim rng As Range, c As Range
Dim Lr As Long
With ActiveSheet
Lr = .Cells(Rows.Count, 2).End(xlUp).Row 'define a ultima linha nao vazia
Set rng = Range("B7:B" & Lr)
Set c = rng.Find("*")
Msg = IIf(Not c Is Nothing, True, False)
Select Case Msg
Case True
Call Print_plan ' ** Chama sua Rotina que imprime
Case False
MsgBox "Não há dados a serem impressos", 64, "Atenção"
End Select
End With
End Sub

Sub Print_plan()
'Intervalo para impressão inicia em B3, mas só deve ser impresso se alguma célula da coluna B estiver preenchida
Dim Lr As Long
With ActiveSheet
Lr = .Cells(Rows.Count, 2).End(xlUp).Row 'define a ultima linha nao vazia
Lr = IIf(Lr < 3, 3, Lr) ' se Lr é menor que 3 define Lr com 3
.Range("B3:F" & Lr).Select
Selection.PrintOut From:=1, To:=1, Copies:=1
.Range("A7").Select
End With
End Sub

[/Code]

Basole, antes de tudo, muito obrigado pelo interesse. Resolvi anexar a planilha com alguns dados de exemplo e na própria planilha procurei demonstrar o que esta acontecendo e o que espero (desejo) que aconteça. Nas descrições das macros também inclui informações a serem observadas. A tua sugestão está na planilha, observe como esta funcionando. Não atendeu o que proponho na minha solicitação de ajuda.

Anexos

Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#10 Por Basole
08/12/2015 - 17:45
Boa tarde Antonio, o codigo que postei esta correto, o problema é que a macro estava verificando na coluna B, a partir da linha 3 (B3) e na linha 4 (b4), tem a palavra "DATA" (vide img), entao qdo. estava sem dados no intervalo (B7 ate B1048576), a macro estava procurando no intervalo (B7 a B4).
Agora eu inseri uma condicao que se a ultima linha preenchida for 4, considerar a linha como 7. Segue anexo c/ as alteracoes

Imagem

Anexos

Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal