Notifications
Clear all

Elseif e "Else sem If" no Excel

7 Posts
5 Usuários
0 Reactions
858 Visualizações
(@annissima)
Posts: 2
New Member
Topic starter
 

Olá,

Tenho uma macro que deve executar macros específicas conforme o resultado de uma consulta.
Vocês podem me ajudar?
Funciona assim, ele checa um código, e de acordo com o que entende, executa a macro.
Quando eu rodo, ele dá problema na terceira linha, "Else sem If", e seleciona a primeira palavra "Range" na linha.

Preciso do seguinte: 1. que N3 = C7, e que se isso for verdadeiro, que ele confira a segunda condição (B8 = ?), nas linhas abaixo, e de acordo com o resultado encontrado, rode a macro.
Então ele vai checar, linha por linha, as condições dó B8, e executar.

If Range("N3") = Range("C7") Then MsgBox "Cartão identificado com sucesso. Prossiga!" Else MsgBox "Colaborador não identificado. Verifique a leitura do código de barras."
If Range("B8") = Range("D36") Then arquivaF34
ElseIf Range("B8") = Range("D37") Then arquivaF26
ElseIf Range("B8") = Range("D38") Then arquivaF31
ElseIf Range("B8") = Range("D39") Then arquivaF39
ElseIf Range("B8") = Range("D40") Then arquivaF38
ElseIf Range("B8") = Range("D41") Then arquivaF27
ElseIf Range("B8") = Range("D42") Then arquivaF007
Else
MsgBox "Colaborador não identificado. Verifique a leitura do código de barras."
End If

 
Postado : 23/06/2016 1:23 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Disponibilize o arquivo com o codigo que fica mais facil, corrigir.

É mais facil fazer um loop

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.

 
Postado : 23/06/2016 2:18 pm
(@osvaldomp)
Posts: 858
Prominent Member
 

Uma possibilidade. Veja se funciona.

Sub teste()
If [N3] = [C7] Then
 MsgBox "Cartão identificado com sucesso. Prossiga!"
Else: MsgBox "Colaborador não identificado. Verifique a leitura do código de barras."
 Exit Sub
End If
 Select Case [B8]
 Case [D36]: arquivaF34
 Case [D37]: arquivaF26
 Case [D38]: arquivaF31
 Case [D39]: arquivaF39
 Case [D40]: arquivaF38
 Case [D41]: arquivaF27
 Case [D42]: arquivaF007
 Case Else:  MsgBox "Colaborador não identificado. Verifique a leitura do código de barras."
 End Select
End Sub

Osvaldo

 
Postado : 23/06/2016 3:20 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Aníssima, bem vinda ao fórum.

O Osvaldo tem razão. Nesse caso um Select Case deixa o código bem mais estruturado e é a melhor opção mesmo.

Mas se vc que saber onde está o erro em seu código, atente para a chamada a "arquivaF34", pois ela deveria estar em uma nova linha:

If Range("B8") = Range("D36") Then
arquivaF34
ElseIf Range.....

 
Postado : 23/06/2016 3:50 pm
(@osvaldomp)
Posts: 858
Prominent Member
 

Mas se vc que saber onde está o erro em seu código, atente para a chamada a "arquivaF34", pois ela deveria estar em uma nova linha:

If Range("B8") = Range("D36") Then
arquivaF34
ElseIf Range.....

Bem observado, Edson. ;)
Abaixo um arranjo clássico para o código original com a correção que você comentou:

Sub teste2()
 
 If Range("N3").Value = Range("C7").Value Then
  MsgBox "Cartão identificado com sucesso. Prossiga!"
 Else: MsgBox "Colaborador não identificado. Verifique a leitura do código de barras."
  Exit Sub
 End If
 
 If Range("B8").Value = Range("D36").Value Then
  arquivaF34
 ElseIf Range("B8").Value = Range("D37").Value Then
  arquivaF26
 ElseIf Range("B8").Value = Range("D38").Value Then
  arquivaF31
 ElseIf Range("B8").Value = Range("D39").Value Then
  arquivaF39
 ElseIf Range("B8").Value = Range("D40").Value Then
  arquivaF38
 ElseIf Range("B8").Value = Range("D41").Value Then
  arquivaF27
 ElseIf Range("B8").Value = Range("D42").Value Then
  arquivaF007
 Else: MsgBox "Colaborador não identificado. Verifique a leitura do código de barras."
 End If

End Sub

Osvaldo

 
Postado : 23/06/2016 4:07 pm
(@annissima)
Posts: 2
New Member
Topic starter
 

Gente, deu certo!
:)

Obrigadíssima!

Ficou assim:

Sub confereCOD()
'ABRE O FORMULARIO DE SENHA
ContrAcesso.Show
Sheets("REGISTRAR").Select
'COPIA O CPF
Range("F7").Select
    Selection.Copy
    Range("N3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    Selection.Font.Size = 6
'COPIA O NG
Range("B7").Select
    Selection.Copy
    Range("B8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    Selection.Font.Size = 6
    
    ' copiatabelaC Macro
    Sheets("C").Select
    Range("A1:C16").Select
    Selection.Copy
    Sheets("REGISTRAR").Select
   'NÃO MUDAR O RANGE ABAIXO
    Range("B36").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    With Selection.Font
        .Name = "Calibri"
        .Size = 1
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    Range("A1").Select
    
'VERIFICA SE O CPF CORRESPONDE, e SE CORRESPONDER, EXECUTA A MACRO equivalente
If [N3] = [C7] Then
 MsgBox "Cartão identificado com sucesso. Prossiga!"
Else: MsgBox "Colaborador não identificado. Verifique a leitura do código de barras."
 Exit Sub
End If
 Select Case [B8]
 Case [D36]: arquivaF34
 Case [D37]: arquivaF26
 Case [D38]: arquivaF31
 Case [D39]: arquivaF39
 Case [D40]: arquivaF38
 Case [D41]: arquivaF25
 Case [D42]: arquivaF007
 Case Else:  MsgBox "Colaborador não identificado. Verifique a leitura do código de barras."
 End Select
'LIMPA OS CAMPOS
    Range("C6").Select
    Selection.ClearContents
    Range("C7").Select
    Selection.ClearContents
    Range("B8").Select
    Selection.ClearContents
    Range("N3").Select
    Selection.ClearContents
    'limpar a cópia de planilha na tabela registrar
    Range("B36:D50").Select
    Selection.ClearContents
        Range("A1").Select
End Sub

É uma macro que arquiva um horário de ponto, sendo que cada funcionário tem uma pasta (oculta) nesse arquivo, e pelo código de barras no cartão ele busca uma correspondência e escolhe qual pasta arquivar... aí tem uma macro para cada pastinha. São poucos funcionários, dá para fazer assim. Aí só deixo uma planilha exibida (a de registro) e fecho com senha.

 
Postado : 24/06/2016 6:48 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia annissima

Seja bem-vinda ao fórum!

Como você é novata, para facilitar a tua participação no fórum, sugiro tomar conhecimento do conteúdo dos links abaixo:
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

[]s
Patropi - Moderador

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/06/2016 7:08 am