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

Inserir fórmula na MsgBox


««Påþs2»»

Pergunta

E ae, galera...

Tou iniciando agora no VB e tou com uma dúvida um tanto quanto simples, mas que ninguém que perguntei sabe a resposta...

Tou fazendo um trabalho pra um curso, no qual eu tenho uma tabela com a cotação mensal (média) de 5 ações diferentes num período de quase 5 anos. Na primeira coluna tenho a data e nas 5 seguintes as empresas.

Dae tenho que fazer dois InputBox's, um para inserir a data e outro pra inserir o ticker (código da empresa) e tenho que retornar o resultado em uma MsgBox. Bem simples, não?

A questão é que eu tenho que fazer uma procura vertical (PROCV no Excel ou VLookUp no VB) pra pegar a cotação da empresa especificada, mas não consigo botar essa fórmula dentro da MsgBox direto. Eu até consegui fazer, mas tive que 'salvar' os dados enviados em células e depois pegar esses dados e colocar na MsgBox.

O problema é que assim a Macro perde totalmente o sentido, já que seria mais fácil digitar as informações nas células do que nos InputBox's... =P

Bom, basicamente isso.

Se eu não tiver sido claro é só perguntar...

Vlw ae!

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Bom, eu realmente não entendi. A MsgBox serve para exibir strings e somente isso. Se você tem que fazer cálculos, fórmulas, etc., faça com variáveis e depois exiba o resultado usando a MsgBox. E, você está usando VBA? Se estiver, me fale para eu mover para a sala correta.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E ae, cara...

Entendi que a MsgBox não pode ter a fórmula diretamente...então minha pergunta passa a ser outra...

Como definir uma variável com essa fórmula?

Algo do tipo:

resultado = "=VLOOKUP(I1,A1:F62,MATCH(I2,A1:F1,0))"

Só sei fazer com Range("I3").Formula , mas é isso que quero evitar...

PS.: Pode mover pra VBA sim, nem tinha visto esse sub-fórum, mal.. :ninja:

Vlw ae! ;)

Editado por ««Påþs2»»
Link para o comentário
Compartilhar em outros sites

  • 0

Po, tentei várias coisas e nenhuma funcionou...

Sub Exercicio_Final()

Dim data As String
Dim ticker As String
Dim resultado2 As Single

data = InputBox("Insira a Data")
ticker = InputBox("Insira o Ticker")

resultado2 = resultado(data, ticker) * 100
resultado2 = Round(resultado2, 2)

MsgBox("O rendimento do ticker " & ticker & " em " & data & " foi de " & resultado2 & "%")

End Sub


Function resultado(data, ticker)

resultado = Evaluate("=+vlookup(""" & data & """, A1:F67, """ & ticker & """)")

End Function

Quais erros tem aqui?

Dá erro de tempo de execução 13 (tipos incompatíveis) :mellow:

Link para o comentário
Compartilhar em outros sites

  • 0

Se na variável data você irá inserir uma Data então deverá declará-la como Date:

Dim data As Date

Se na variável ticker você realizará operações matemáticas, então deverá declará-la ou do tipo Integer (números inteiros), Double (números decimais), Long e etc...

Dim ticker As Double

Link para o comentário
Compartilhar em outros sites

  • 0

E ae...

Eu tou sabendo dessas paradas, mas fiz assim porque não sei comparar variáveis do tipo Date...como as datas possíveis são aquelas no intervalo de 9/2002 a 8/2007 , eu comparei strings quebrando esse valor...

If (Right(data, 4) < 2002) _
Or ((Right(data, 4) = 2002) And ((Len(data) = 6 And Left(data, 1) < 9))) _
Or (Right(data, 4) > 2007) _
Or ((Right(data, 4) = 2007) And ((Len(data) = 6 And Left(data, 1) = 9) Or (Len(data) = 7))) Then
MsgBox "A data especificada deve estar no intervalo de 9/2002 a 8/2007" + Chr$(13) + Chr$(13) & "Tente novamente!", 0 + 16 + 0 + 4096, "Formato incorreto"
Exit Sub
End If

Provavelmente não é a melhor maneira de fazer isso, mas deu certo... =P

Quanto ao Ticker, ele é o nome da ação de determinada empresa...no caso, os possíveis são PETR4 (Petrobras), BBAS3 (Banco do Brasil), CSNA4 (CSN), LAME4 (Lojas Americanas) e ARCZ6 (Aracruz)...

Será que o erro tá por aí?

Eu acho que tem mais a ver com a sintaxe ou mesmo a contrução da função, sei lá...

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, tenho uma sugestão, espero que ajude. Uma forma de usar fórmula sem precisar colocar numa célula é através o WorksheetFunction, no caso da PROCV, seria assim:

resultado = Application.WorksheetFunction.Vlookup(arg1, arg2, arg3, arg4)

arg1=valor procurado

arg2=matriz

arg3=coluna a qual retornar

arg4=0 se dados não estão organizados em alguma ordem: crescente ou decrescente; 1 para caso positivo.

:unsure:

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, isso já foi uma graaande mão na roda...funcionou certinho, maaas...

Sub final()

Dim data As String
Dim ticker As String

data = InputBox("Insira a Data")
ticker = InputBox("Insira o Ticker")

Range("I1").Value = data
Range("I2").Value = UCase(ticker)

resultado = Application.WorksheetFunction.VLookup(Range("I1"), Range("A1:F62"), Application.WorksheetFunction.Match(Range("I2"), Range("A1:F1"), 0), 0)

MsgBox ("O rendimento do ticker " & ticker & " em " & data & " foi de " & resultado & "%")

End Sub

Ainda tive que colocar os valores da data e do ticker em células, que não consegui botar direto na fórmula...tentei sem aspas, com, com 2 e com 3 e nada... :wacko:

Vlw ae, cara...

Já ajudou bastaaante! ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde, como faço para criar o msgbox "não cadastrados", quando encontrar apenas a B4 vazia , abaixo minha macro e não consegui incluir msgbox. 

Sub consulta()

Range("B4").Value = WorksheetFunction.VLookup(Range("B2"), Range("Bdados"), 3, 0)
Range("B3").Value = WorksheetFunction.VLookup(Range("B2"), Range("Bdados"), 2, 0)
Range("B5").Value = WorksheetFunction.VLookup(Range("B2"), Range("Bdados"), 5, 0)
Range("B6").Value = WorksheetFunction.VLookup(Range("B2"), Range("Bdados"), 4, 0)
Range("B7").Value = WorksheetFunction.VLookup(Range("B2"), Range("Bdados"), 6, 0)
Range("B8").Value = WorksheetFunction.VLookup(Range("B2"), Range("Bdados"), 7, 0)
Range("B9").Value = WorksheetFunction.VLookup(Range("B2"), Range("Bdados"), 8, 0)

 

End Sub

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...