Ir ao conteúdo

Excel - VBA


fabinho171

Posts recomendados

Postado

Alguem consegue me dar um auxílio para corrigir o código de VBA abaixo ?

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

A coisa é simples, mas em vez de me mostrar o maior valor, ele está mostrando o MENOR e eu não consigo descobrir o porque!!

Postado

Amigo, simplifique seu código, não há necessidade de duas funções, segue:


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")
If valor_1 > valor_2 Then
maior = valor_1
ElseIf valor_2 > valor_1 Then
maior = valor_2
Else: MsgBox ("Os valores " & valor_1 & " e " & valor_2 & " são iguais.")
End If
MsgBox ("O valor " & maior & " é o maior entre " & valor_1 & " e " & valor_2 & ".")
End Sub

Abraços

RafaVillani

Postado

Hum entendi!

Eu sou novato no VBA, vi esse código em um exemplo que explicava a capacidade de uma SUB chamar uma FUNÇÃO. Por isso estava separado em duas partes...

Você consegue ver o que está dando de errado no modelo que eu postei? Quero entender também onde estou errado para aprender sempre!

Postado

Galera,

Estive com essa mesma dúvida em outro forum e já tive a resposta. Vou coloca-la aqui para que divulgar conhecimento.

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

CODE

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:

CODE

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):

CODE

Function ver_maior(ByVal a As Integer, ByVal B As Integer) As Integer

e tb seria legal declarar as duas variaveis já tipadas:

CODE

Dim valor_1 As Integer, valor_2 As Integer"

BY KUROI

http://scriptbrasil.com.br/forum/index.php?showtopic=149433&st=0&gopid=588603entry588603

Resumindo , o código abaixo ficou da mesma "forma", mas correto.

Sub ident_maior()

Dim valor_1 As Integer, 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 As Integer, ByVal B As Integer)

If a > B Then

ver_maior = a

Else

ver_maior = B

End If

End Function

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!