Notifications
Clear all

Entender o erro de compilação

6 Posts
3 Usuários
0 Reactions
1,941 Visualizações
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Prezados, boa tarde!

Apenas gostaria de entender o que está errado com o código abaixo

Sub Olá_Mundo()

Dim mensagem As String

mensagem = "Olá mundo"

MsgBox = mensagem

End Sub

erro ao executar o código

Erro de compilação:

Chamada a função no lado esquerdo de uma atribuição precisa retornar Variant ou Object

muito obrigado a todos pela atenção.

 
Postado : 08/10/2019 10:35 am
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

JNEXCEL, o erro é pelo sinal de "=", não se utiliza :

O correto é assim :

MsgBox mensagem

[]s

 
Postado : 08/10/2019 10:47 am
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Certo, entendi.

e para ele validar a variável como faço?

exemplo:

Dim MENSAGEM As Boolean

MENSAGEM = 10

MsgBox MENSAGEM

como faço para o excel valide a informação antes de mostrar a msgbox?

exemplo: eu coloquei boolean (verdadeiro ou falso), mas informei que a variável mensagem = 10

muito obrigado

 
Postado : 08/10/2019 11:06 am
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

JNEXCEl, precisamos saber o que pretende.

Declarando como Tipo "Boolean" a mesma só retorna se a condição é "Verdadeira ou Falsa", existem várias implementações onde podemos usar esse Tipo, mas para simplificar e ficar mais claro, seria isso :

Sub Olá_Mundo()

    Dim MENSAGEM As Boolean
    
    MENSAGEM = 10 > 9
    
    MsgBox MENSAGEM

End Sub

Nessa rotina o resultado de MENSAGEM será "Verdadeiro", pois 10 é maior que 9, se trocar o Sinal para Menor teremos o resultado "Falso"

Como eu disse, temos varias implementações para utilizar o Boolean, tipo mudar um resultado que seria Verdadeiro para Falso ou vice e versa dependendo do que queremos.

Sub Olá_Mundo()

    Dim MENSAGEM As Boolean
    
    '10 maior que 9 - resultado Verdadeiro
    MENSAGEM = 10 > 9
    
    'Alteramos a condição do retorno, dependendo do que queremos fazer
    'Se Verdadeiro
    If MENSAGEM = True Then
        'Setamos para Falso
        MENSAGEM = False
    
    End If

    MsgBox MENSAGEM

End Sub

Nessa rotina o resultado de MENSAGEM é "Verdadeiro", pois 10 é maior que 9, mas alteramos o resultado para "Falso", tudo depende do que pretendemos em nossa aplicação e do retorna das Variáveis.

Lembrando que por padrão "Boolean" inicia sempre como "False"

Espero ter ajudado

[]s

Mauro Coutinho

 
Postado : 08/10/2019 11:35 am
(@jnexcel)
Posts: 298
Reputable Member
Topic starter
 

Bom dia!

Agradeço pela atenção.

então, na verdade eu não estou criando nenhuma rotina ou código, apenas para entendimento mesmo

observe os códigos abaixo:

' aqui está ok, considerei que minha variável é do tipo texto
' e o conteúdo da variável é do tipo texto
' sem problemas perfeito

Sub Olá_Mundo()

Dim mensagem As String

mensagem = "Olá Mundo"

MsgBox mensagem, , ""

End Sub


------------------------------------------------------------------------------------------------------------
' aqui está um detalhe que gostaria de verificar como faço
' exemplo: eu mudei o tipo da variável para "LONG", logo não é mais um texto e sim um número
' mas o conteúdo da variável ainda é um texto  (mensagem = "Olá Mundo")
' se eu rodar a macro ela vai exibir a mensagem Olá Mundo, mesmo eu dizendo que ela não é um texto
' como faço para que a msgbox não seja exibida ?
' melhor dizendo:
' COMO FAÇO PARA QUE O EXCEL ANALISE O CONTEÚDO DA VARIÁVEL ANTES DE RODAR A MSGBOX

Sub Olá_Mundo()

Dim mensagem As Long

mensagem = "Olá Mundo"

MsgBox mensagem, , ""

End Sub

sem dar erro de tempo de execução

tipos incompatíveis

seria assim:

se eu tentar rodar o segundo código (as long)

exibir uma msgbox dizendo, o conteúdo da variável não é do tipo texto

Isso que eu gostaria de entender.

espero ter explicado melhor agora

 
Postado : 09/10/2019 5:52 am
Reinaldo
(@rlm)
Posts: 246
Estimable Member
 

Não entendi o que espera como "validação"?
Ao definir a variável como texto (String) e atribuir a essa variável uma frase tipo "Hello Word"; e inseri-la em um msgbox irá "rodar" beleza;
contudo se definir essa variável como numérica e tentar atribuir a essa variável uma frase, ao executar o interpretador de codigo do vba irá produzir uma mensagem de erro "tipos incompativeis".
Ou ainda pode utilizar algo +/- assim:

Sub Ola_Mundo()
Dim mensagem As Variant
mensagem = 100 '"Olá Mundo"
    If VBA.IsNumeric(mensagem) Then
        MsgBox mensagem & " é um numero"
    Else
        MsgBox mensagem & " Não é um numero"
    End If
End Sub

Reinaldo

 
Postado : 09/10/2019 8:11 am