Declaração de Funçõ...
 
Notifications
Clear all

Declaração de Funções NÃO funciona

10 Posts
5 Usuários
0 Reactions
1,334 Visualizações
(@shinohara)
Posts: 0
New Member
Topic starter
 

Amigos, boa tarde. Utilizo VBA versão 7.1.
Windows 7 e Office 2013.

Não estou conseguindo fazer a declaração de argumentos para funções. Por exemplo:

Sub Func(ByVal nome as String, ByVal idade as integer)

Essa sub função NÃO devolve os valores de 'nome' e 'idade' para a função principal.

FIz isso durante anos mas agora neste computador novo não consigo.

Alguém poderia ajudar?

 
Postado : 16/05/2018 11:21 am
(@xlarruda)
Posts: 0
New Member
 

A linha do seu código parece uma função, mas você inicia com Sub. É isso mesmo?

 
Postado : 16/05/2018 12:04 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

shinohara,

Boa tarde!

Assim, só com esse pedaço de código... fica meio difícil!

Palpite: Retire esse "Sub" da frente e atribua o que a função deve retornar. Por exemplo:

Func(ByVal nome as String, ByVal idade as integer) As Integer
 
Postado : 16/05/2018 12:04 pm
(@shinohara)
Posts: 0
New Member
Topic starter
 

Muito obrigado por responder, meu caro. Não consigo rodar algo tão simples quanto isso:

---------------------------------------------------------------------------------

Sub main()
apresentacao nome, idade
MsgBox "Meu nome é: " & nome & "e minha idade é: " & idade
End Sub

Sub apresentacao(ByVal nome As String, ByVal idade As Integer)
nome = InputBox("Digite seu nome: ")
idade = InputBox("Digite sua idade: ")
End Sub
 
Postado : 16/05/2018 12:45 pm
(@klarc28)
Posts: 0
New Member
 

Function é para retornar valores.
Sub é para executar ações.

Exemplo de uma Sub:

Sub apresentacao()
dim nome as string
dim idade as double
nome = InputBox("Digite seu nome: ")
idade = cdbl(InputBox("Digite sua idade: "))
MsgBox "Meu nome é: " & nome & " e minha idade é: " & idade
End Sub

Exemplo de uma Function:

Public Function Faixa( ByVal idade as Integer) As String

if idade >= 18 then

Faixa = "Adulto"

else

Faixa = "Menor de Idade"

end if
End Function

Exemplo de chamada da Function:


Sub Atualizar (  )


textbox1.text = Faixa(cint(textbox2.text))

End Sub


 
Postado : 16/05/2018 12:48 pm
(@xlarruda)
Posts: 0
New Member
 

Se quer puxar o valor da variável de outra sub use "ByRef" ao invés de ByVal. Assim:

Sub apresentacao(ByRef nome As String, ByRef idade As Integer)
nome = InputBox("Digite seu nome: ")
idade = InputBox("Digite sua idade: ")
End Sub
Sub main()
Dim nome as String
Dim idade as Integer
apresentacao nome, idade
MsgBox "Meu nome é: " & nome & "e minha idade é: " & idade
End Sub
 
Postado : 16/05/2018 2:03 pm
(@edsonbr)
Posts: 0
New Member
 

Nesse caso, passe os parâmetros por Referência ao invés de por Valor: substitua ByVal por ByRef

Ou então declare nome e idade como variáveis globais (na área de declaração).

Obs.: é necessário dimensionar as variáveis do com o mesmo tipo que foi declarada na Sub ou Function.

Sub main()
  Dim nome As String, idade As Integer
  apresentacao nome, idade
  MsgBox "Meu nome é: " & nome & "e minha idade é: " & idade
End Sub
Sub apresentacao(ByRef nome As String, ByRef idade As Integer)
  nome = InputBox("Digite seu nome: ")
  idade = InputBox("Digite sua idade: ")
End Sub
 
Postado : 16/05/2018 2:14 pm
(@edsonbr)
Posts: 0
New Member
 

Desculpa aí, Xlarruda... atravessei a resposta pq não vi a sua.

 
Postado : 16/05/2018 2:16 pm
(@xlarruda)
Posts: 0
New Member
 

Que nada Colega EdsonBR, quanto mais informação melhor.

Além do mais, você é o cara! Abrç!

 
Postado : 16/05/2018 2:26 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Caros colegas,

Boa noite!

Pedimos, por gentileza, não utilizar citações de inteiro teor das mensagens que lhes são encaminhadas. As citações devem se restringir a trechos estritamente necessários ao entendimento da mensagem que se deseja enviar.

Pedimos ainda que os códigos VBA aqui inseridos sejam colocados dentro da ferramenta CODE existente logo acima da caixa de mensagens (quinto botão da esquerda para a direita).

 
Postado : 16/05/2018 3:48 pm