Ir para conteúdo
Fórum Script Brasil
  • 0

Excel - VBA - Dúvida em código


Belotto

Pergunta

Boa tarde galera!

Sou meio novato em VBA, estou aprendendo com algumas apostilas que achei na net e tals... em uma delas, eu fiz um código bem simples abaixo, porém, ele não está funcionando como deveria.

Sub ident_maior()
Dim valor_1, valor_2 As Integer
Dim maior As Integer
valor_1 = InputBox("Introduza o 1º Valor")
valor_2 = InputBox("introduza o 2º Valor")
maior = ver_maior(valor_1, valor_2)
MsgBox ("O valor " & maior & " é o maior entre " & valor_1 & " e " & valor_2 & ".")

End Sub

Function ver_maior(ByVal a, ByVal B)
If a > b Then
ver_maior = a
Else
ver_maior = b
End If

End Function

O código é simples, eu digito dois números e ele me diz qual é maior entre eles. Porém, em vez disso, ele ta me dizendo o menor!!!

Já me sugeriram meios de simplificar esse código e tals, mas eu quero entender o que está dando errado nesse para aprender!

Estou a uns dois dias fuçando e não acho onde está errado!

Obrigado galera!

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

belotto, isso esta ocorrendo por problemas na tipagem das variaveis. observe a primera linha:

Dim valor_1, valor_2 As Integer
você ta dizendo q a variavel valor_2 é Integer. mas isso não se aplica pra variavel valor_1 (ao contrario do q acontece em otras linguagens, inclusive em vb.net, especificar o tipo da ultima variavel da linha não significa q as variaveis anteriores tb serao desse tipo). ele ta interpretando o valor_1 como Variant, e depois da chamada do InputBox, assume q a variavel é String (pois o retorno do InputBox é sempre uma String). e na declaracao da funcao, você tb não especifica os tipos dos parametros:
Function ver_maior(ByVal a, ByVal B)
então, ele acaba entendendo q eles são do mesmo tipo das variaveis passadas por parametro. ou seja, ele vai interpretar o a como texto e o b como numerico. e isso acaba causando confusao na hora de comparar as duas, por isso o retorno parece não fazer sentido. isso seria resolvido se você especificasse os tipos dos parametros (tb é bom especificar o tipo de retorno da funcao):
Function ver_maior(ByVal a As Integer, ByVal B As Integer) As Integer
e tb seria legal declarar as duas variaveis já tipadas:
Dim valor_1 As Integer, valor_2 As Integer

Link para o comentário
Compartilhar em outros sites

  • 0
Deixa-me perguntar outrra coisa. Você citou que o retorno do inputbox é sempre STRING. Mas, se no caso, a variável estiver especificada como integer, resolve?

sim, porque ele faz a conversao automaticamente pra vc, entretanto você tem q tomar cuidado, porque você nunca sabe o q ele vai digitar no inputbox e não tem como validar. tipo, se o cara digitar texto la, vai ocorrer erro na hora de gravar em uma variavel integer.

mas, no vba, você tem o Application.InputBox(), q você pode especificar se a inputbox recebera texto, numero, true/false, etc.

exemplo de como usar aqui: http://www.tomasvasquez.com.br/blog/micros...cation-inputbox

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...