Notifications
Clear all

Campo Obrigatório - Não deixar Salvar e Nem Imprimir

8 Posts
4 Usuários
0 Reactions
3,167 Visualizações
(@admaury)
Posts: 50
Trusted Member
Topic starter
 

Boa Tarde Colegas;

Tenho uma planilha com formato de formulário, estou com grande problema entre os usuários da mesma, pois não estão preenchendo corretamente ( deixa dados em branco) e estão imprimindo e salvando.

Preciso de duas modificação;

- 1ª se não preencher as células ( C8, J8, N8, R8, C11, K11,....) trava para não deixar imprimir e nem salvar;

- 2ª caso informe a opção na opção TIPO "K11" ( transferência ou deposito ) obriga a preencher a celulas ( D7, D48,D49 E D50) e segue a mesma regra da primeira solicitação.

Se puder me der um caminho fico agradecido;

Obrigado por enquanto.

Link do Modelo:
https://1drv.ms/x/s!AtzGlCHJsviZgR1A5QK ... o?e=ziVoF6

 
Postado : 08/10/2019 4:08 pm
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

Admaury, não tenho como ver seu modelo no momento, então vou colocar uma rotina que eu usei a um tempo atraz que verifica se as celulas estão preenchidas, observe que para ficar mais limpo e fácil de identificar as celulas eu Nomeei as mesmas, essa rotina tem varias verificaçõess de celulas, mas reduzi só para exemplificar, veja se consegue adaptar a sua questão, só não esqueça que se nomear suas celulas alterar na rotina.

Sub VerificaCampos()
    Dim sConfirma   As Integer
    Dim strVazia
    Dim msg, MsgI
    
    msg = "Preenchimento Obrigatório"   ' Define a mensagem
    MsgI = "Preenchimento Opcional"   ' Define a mensagem
    
    If Range("sCelData").Value = "" Then 'Range DATA
            strVazia = "Data"
            MsgBox "Campo " & (strVazia & " em Branco"), vbCritical, msg
            Range("sCelData").Activate
            Exit Sub
        
        ElseIf Range("sCelDoc").Value = "" Then 'Range Documento
                    strVazia = "Documento"
                    MsgBox "Campo " & (strVazia & " em Branco"), vbCritical, msg
                    Range("sCelDoc").Activate
                Exit Sub
                                
        ElseIf Range("sCelEndereco").Value = "" Then 'Range Endereço
                    strVazia = "Endereco"
                    MsgBox "Campo " & (strVazia & " em Branco"), vbCritical, msg
                    Range("sCelEndereco").Activate
                Exit Sub
        
        ElseIf Range("sCelObs").Value = "" Then 'Range OBS com exigindo confirmação
                    strVazia = "Observação"
                    sConfirma = MsgBox("Campo " & (strVazia & " em Branco") _
                    & vbCrLf & vbCrLf & "Deseja Continuar ?", vbYesNo + vbInformation, MsgI)
      
            If sConfirma = vbNo Then
                    Range("sCelObs").Activate
                Exit Sub
    
            End If
        'Após verificações continua o Cadastro chamando a rotina
        'Call LançarNovo
    Else
        'Call LançarNovo
    End If

End Sub

Essa rotina impede de Salvar após a verificação, você tem de colar no Evento do modulo da pasta "Private Sub Workbook_BeforeSave" e não da planilha.
É só um exemplo de verificação de algumas celulas antes de SALVAR, tem de ser ajustada ao que precisa.

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
    'Impede Salvar Como
    Cancel = True

    'Verifica se as células A1, B1 e C1 estão vazias
    If IsEmpty(Range("Plan1!A1")) Or IsEmpty(Range("Plan1!B1")) Or IsEmpty(Range("Plan1!C1")) Then
        Mensagem = MsgBox("Celulas A1, B1 ou C1 estão vazias.", vbExclamation, "Documento não será salvo")
    Exit Sub
    
    End If

End Sub

Essa rotina impede de IMPRIMIR após a verificação, você tem de colar no Evento do modulo da pasta "Private Sub Workbook_BeforePrint" e não da planilha.
É só um exemplo de verificação de algumas celulas antes de IMPRIMIR tem de ser ajustada ao que precisa.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Impede Imprimir
Cancel = True

'Verifica se as células A1, B1 e C1 estão vazias
    If IsEmpty(Range("Plan1!A1")) Or IsEmpty(Range("Plan1!B1")) Or IsEmpty(Range("Plan1!C1")) Then
        Mensagem = MsgBox("Células A1, B1 ou C1 estão vazias.", vbExclamation, "Documento não será Impresso")
        Exit Sub
    
    End If

End Sub

Espero que ajude.

[]s
Mauro Coutinho

 
Postado : 09/10/2019 7:37 am
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
 

.
Admaury, se a solução do Coutinho não resolver, poste o arquivo no www.sendspace.com ... depois cola o link aqui !! ... (esse site q vc postou - e outros - são meio chatinhos de usar)!!
.

 
Postado : 09/10/2019 7:55 am
(@admaury)
Posts: 50
Trusted Member
Topic starter
 

Segue o Link para baixar:
https://www.sendspace.com/file/szc118

 
Postado : 09/10/2019 8:18 am
(@admaury)
Posts: 50
Trusted Member
Topic starter
 

Bom dia Coutinho;

- tentei executar e não evolui no trabalho, eu tenho pouco conhecimento em VBA, ate li alguns artigos, e mesmo assim deu varios erros e não realizou a operação.

- Se conseguir me detalhar melhor eu ficaria agradecido, e vai desculpando a minha falta de conhecimento.

Obrigado

 
Postado : 09/10/2019 8:25 am
Reinaldo
(@rlm)
Posts: 246
Estimable Member
 

Creio AdMaury voce está no caminho certo em suas rotinas porem "aplicando-as" em local errado.
Rotinas tipo "Workbook_BeforeSave" e/ou "Workbook_BeforeClose" não são interpretadas se inseridas em um modulo "geral' como voce colocou em seu projeto;
essas rotinas deve ser inseridas no modulo de workbook "Esta_Pasta_de_Trabalho"
Mova as rotinas para esse modulo e experimente.

Reinaldo

 
Postado : 09/10/2019 8:30 am
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
 

.
Me metendo na resposta dos outros (kk) ... mas é que me interessei pelo assunto!!
.
rlm, testei aqui e funcionou parcialmente !!! ... Coloquei o primeiro código na Pasta de Trabalho e mostrou a msg: falta preencher A1, B1 e C1 ... até aqui ok!! .... Mas depois de preencher e tentar salvar não acontece nada, ou seja, não abre a janela para eu salvar!!!
.
Ops!! Editando ... é que faltou o "Cancel = False" no final ....... Agora ficou show!!!
.

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
    'Impede Salvar Como
    Cancel = True

    'Verifica se as células A1, B1 e C1 estão vazias
    If IsEmpty(Range("Plan1!A1")) Or IsEmpty(Range("Plan1!B1")) Or IsEmpty(Range("Plan1!C1")) Then
        Mensagem = MsgBox("Celulas A1, B1 ou C1 estão vazias.", vbExclamation, "Documento não será salvo")
    Exit Sub
   
    End If
Cancel = False
End Sub
 
Postado : 09/10/2019 9:17 am
(@admaury)
Posts: 50
Trusted Member
Topic starter
 

Agora deu certo! muito obrigado meu amigos

 
Postado : 09/10/2019 3:18 pm