Página 1 de 1

Se a célula for vazia encerrar comando [2]

Enviado: 20 Jun 2020 às 19:20
por Pablo
Olá pessoal,

Vamos a situação, tenho uma planilha que é uma lista de presença que é necessário imprimir várias abas, mas todas tem em comum algumas informações.

Estou criando um comando para imprimir todas essas abas de uma só vez para cada dia da semana, até aí ok. Onde o principio é se a célula correspondendo ao dia estiver preenchida ele imprime, se não ele deve encerrar o comando.
Quando estão todos preenchidos e ele não precisa parar o comando antes do fim vai tranquilo, agora quando tem uma célula vazia e precisa encerrar o comando está dando erro.

Deixo a planilha em anexo para vocês visualizarem o que eu estou dizendo.

Obrigado!!

Re: Se a célula for vazia encerrar comando [2]

Enviado: 21 Jun 2020 às 08:48
por babdallas
Veja se funciona:
Código: Selecionar todos
Public Sub Imprimir_17jun()
    Dim lngLin      As Long
    
    With wshFicha
        For lngLin = 4 To 8
            If wshImprimir.Cells(lngLin, 2).Value2 = "" Then Exit Sub
            
            .Range("S6:Z6").FormulaR1C1 = "=Imprimir!R[" & lngLin - 6 & "]C[-17]"
            .Range("D7:I7").FormulaR1C1 = "=Imprimir!R[" & lngLin - 7 & "]C[-1]"
            .Range("I13:AB35").FormulaR1C1 = "=Imprimir!R[" & lngLin - 13 & "]C[-5]"
            
            Imprimir
        Next lngLin
    End With
End Sub

Private Sub Imprimir()
    wshFicha.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    wshFicha2.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    wshFicha3.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    wshFicha4.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    wshFicha5.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    wshFichaEsc.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub

Se a célula for vazia encerrar comando [2]

Enviado: 21 Jun 2020 às 11:38
por Pablo
Obrigado! Amanhã no trabalho vou testar =]

Pode me explicar o princípio que você usou?

Re: Se a célula for vazia encerrar comando [2]

Enviado: 21 Jun 2020 às 17:06
por babdallas
Seu código tinha a seguinte estrutura:

1) Verifica da linha 4 até a linha 8 se a célula era vazia. Se sim, saia da subrotina. Desta forma, substitui estas 5 verificações por um loop (for next) da linha 4 até a linha 8.
2) Dentro do loop, verifica se as células das linhas 4 a 8 da planilha Imprimir estão vazias. Se sim, sai da subrotina. Se não, continua o código abaixo.
3) Após, você tinha basicamente três grupos de intervalos de células a quais você atribuia fórmulas diferentes a cada uma. Notei que a cada linha, a fórmula também mudava sempre em uma linha abaixo. Sendo assim, verifiquei que havia um padrão e consegui fazer uma fórmula que depende da linha do loop (de 4 a 8).
4) Depois, você fazia a impressão das várias ficas. Juntei tudo isso em uma subrotina só que chamei de Imprimir. Então, chamei esta subrotina Imprimir na subrotina principal a cada linha do loop.

Não sei se ficou claro, mas foi este raciocínio que usei.

Se a célula for vazia encerrar comando [2]

Enviado: 22 Jun 2020 às 21:54
por Pablo
Ótima sacada! Essa ideia do loop vai me ajudar em outros projetos!
Muito obrigado!!