none
VBA - SUB - Call Function e retorna value para Sub RRS feed

  • Pergunta

  • Eu estou tentando fazer uma sub que chame uma Function e o resultado da funcuntion retorne para sub principal na variavel x

    Alguém sabe como eu faço isso? eu tentei o return mas não deu certo. Estou fazendo isso pra praticar.

    Sub lucro()
    Dim compra As Currency
    Dim venda As Currency

    Call resultado(InputBox("Valor de compra da mercadoria R$: "), InputBox("Valor de venda da mercadoria R$: "))
    MsgBox x

    margem = (x / compra) * 100

    End Sub

    Function resultado(C As Currency, V As Currency) As Double
    x = V - C
    return x
    End Function

    Function margem()
    margem = (resultado / compra) * 100

    return margem

    End Function

    sábado, 20 de junho de 2020 02:00

Respostas

  • No seu exemplo não há necessidade de usar "ByRef" (apesar dele ser o default se não declarado):

    Sub lucro()
    
    Dim Compra As Currency
    Dim Venda As Currency
    
    Dim x As Currency
    
    'x = resultado(InputBox("Valor de compra da mercadoria R$: "), InputBox("Valor de venda da mercadoria R$: "))   'Funciona tbm
    
    Compra = InputBox("Valor de compra da mercadoria R$:", "Compra")
    Venda = InputBox("Valor de venda da mercadoria R$:", "Venda")
    
    x = resultado(Compra, Venda)
    
    MsgBox "O resultado incial é: " & x, vbInformation, "Resultado"
    MsgBox "A Margem é: " & margem(x, Compra), vbInformation, "Resultado"
    
    End Sub
    
    Function resultado(C As Currency, V As Currency) As Double
    
    resultado = V - C
    
    End Function
    
    Function margem(resultado As Currency, Compra As Currency)
    
    margem = (resultado / Compra) * 100
    
    End Function
    


    Filipe Magno

    • Marcado como Resposta vieirawj sexta-feira, 26 de junho de 2020 01:40
    quarta-feira, 24 de junho de 2020 00:40

Todas as Respostas

  • Você pode retornar valores de duas formas: utilizando argumentos "ByRef" ou com o nome da função para "Function" (não necessita a palavra "Return"). Exemplo:

    Sub Resultado()
    
    MsgBox "A soma de 10 + 5 é igual a " & Soma(10, 5) & "!", vbInformation, "Exemplo de Function"
    
    
    End Sub
    
    Function Soma(a, b)
    
    Soma = a + b
    
    End Function


    Filipe Magno

    segunda-feira, 22 de junho de 2020 11:34
  • Poderia exemplificar no caso que montei? 

    Não sei utilizar o ByRef
    terça-feira, 23 de junho de 2020 02:34
  • No seu exemplo não há necessidade de usar "ByRef" (apesar dele ser o default se não declarado):

    Sub lucro()
    
    Dim Compra As Currency
    Dim Venda As Currency
    
    Dim x As Currency
    
    'x = resultado(InputBox("Valor de compra da mercadoria R$: "), InputBox("Valor de venda da mercadoria R$: "))   'Funciona tbm
    
    Compra = InputBox("Valor de compra da mercadoria R$:", "Compra")
    Venda = InputBox("Valor de venda da mercadoria R$:", "Venda")
    
    x = resultado(Compra, Venda)
    
    MsgBox "O resultado incial é: " & x, vbInformation, "Resultado"
    MsgBox "A Margem é: " & margem(x, Compra), vbInformation, "Resultado"
    
    End Sub
    
    Function resultado(C As Currency, V As Currency) As Double
    
    resultado = V - C
    
    End Function
    
    Function margem(resultado As Currency, Compra As Currency)
    
    margem = (resultado / Compra) * 100
    
    End Function
    


    Filipe Magno

    • Marcado como Resposta vieirawj sexta-feira, 26 de junho de 2020 01:40
    quarta-feira, 24 de junho de 2020 00:40