none
Por que minha função não aceita End If? RRS feed

  • Pergunta

  • A função a seguir, recebe uma palavra e retira tudo o que não for número ou vírgula. No entanto, o primeiro If termina com GoTo e não exige "EndIf" e, o segundo If, dentro do For, também não exige End If sem motivo, por que o programa dá erro quando coloco End If?

    ' VERIFICA QUAIS PALAVRAS REFEREM-SE A NÚMEROS E RETIRA COLCHETES, HÍFENS, ETC
    Function GetNum(Phrase As String) As String
    
    '  DECLARAÇÕES
      Dim Temp As String
      Dim caractere As Long
      On Error GoTo EndFunc
    
    '  OBTÉM OS NÚMEROS
      Temp = ""
      If InStr(1, Phrase, "º") Then GoTo EndFunc 'se houver o símbolo de graus, então nada é retornado
      
        For caractere = 1 To Len(Phrase) 'para cada caractere da palavra, se ele for numérico
          If (IsNumeric(Mid(Phrase, caractere, 1))) = True Or Mid(Phrase, caractere, 1) = "," Then _
            Temp = Temp & Mid(Phrase, caractere, 1) 'então é adicionado à variável temporária
        Next caractere
        
        If Len(Temp) = 0 Then 'se, no final da avaliação, não houver nada numérico
          GetNum = "" 'então nada é retornado
        Else 'do contrário, a função retorna os números naquela palavra
          GetNum = Temp
        End If
        
      
    EndFunc:
        GetNum = Temp
      
    End Function
    

    sábado, 5 de março de 2011 20:44

Respostas

  • A quetão é: toda vez que o "if" é resolvido dentro de uma linha, não precisa de end if.

    Ja se ele for resolvido em mais de uma linha, ai sempre precisará. Independente do que faz o bloco de codigo dentro do If.

     


    Caio Vitullo
    • Marcado como Resposta Marlon Saveri sexta-feira, 11 de março de 2011 15:39
    quarta-feira, 9 de março de 2011 18:35

Todas as Respostas

  • testei sua Função funcionou normal..
    zinho
    domingo, 6 de março de 2011 11:29
  • Esta função esta normal funcionando com êxito.

     Parabéns pela lógica.

    segunda-feira, 7 de março de 2011 14:23
  • Obrigado.

     

    Então, funcionar funciona, mas não deveria, pois os dois primeiros "If" não possuem "End If".

     

    Por exemplo, este meu outro código:

        If existencia = True And novacolunal = False Then Exit Sub

    também funciona normalmente apesar de não escrever End If.

     

    Daí pensei: "Quando tem Exit Sub não precisa de End If?!" O que também não faz sentido, pois se eu utilizasse:

        If existencia = True And novacoluna = False Then

          msgbox existencia & novacoluna

          Exit Sub

     

    a função não compilaria, exigindo End If.

    quarta-feira, 9 de março de 2011 14:15
  • A quetão é: toda vez que o "if" é resolvido dentro de uma linha, não precisa de end if.

    Ja se ele for resolvido em mais de uma linha, ai sempre precisará. Independente do que faz o bloco de codigo dentro do If.

     


    Caio Vitullo
    • Marcado como Resposta Marlon Saveri sexta-feira, 11 de março de 2011 15:39
    quarta-feira, 9 de março de 2011 18:35