Execução e funciona...
 
Notifications
Clear all

Execução e funcionamento da Function

9 Posts
3 Usuários
0 Reactions
1,417 Visualizações
(@c-ideias)
Posts: 15
Active Member
Topic starter
 

Bom dia pessoal!
Procurei no fórum e em alguns vídeos na internet sobre o funcionamento da Function em VBA, porém não consegui sanar meu problema.
Tenho uma planilha de exemplo no qual ao apertar um botão na plan1, abre o UserForm2.
- No Userform2 temos um outro botão: "Preencher Campos do Userform1"
- Ao pressionar o botão "Preencher Campos do Userform1" aparece o Userform1 com três TextBox.
- Se as células F2 ou F3 da plan1 estiverem selecionadas, as textbox deveriam ser preenchidas com os valores das células H2, H3 e H4 respectivamente.
Neste ultimo passo está dando erro "Erro em tempo de execução '438', O objeto não aceita esta propriedade ou método"

Quebrei bastante a cabeça mas não consegui resolver, estou com problemas no compreendimento da Function e não consegui melhorar isso com os tópicos e vídeos que vi.
Poderiam me ajudar a clarear isso pessoal?
Obrigado desde já.

Segue abaixo o exemplo citado acima:

 
Postado : 06/06/2018 5:43 am
(@boobymcgee)
Posts: 84
Trusted Member
 

A chamada no código "funcaoteste" esta errada, faça assim:

Public Function funcaoTeste(mensagem1, mensagem2, mensagem3)

UserForm1.TextBox1.Text = Sheets("Plan1").Range("H2").Value
UserForm1.TextBox2.Text = Sheets("Plan1").Range("H3").Value
UserForm1.TextBox3.Text = Sheets("Plan1").Range("H4").Value

End Function
 
Postado : 06/06/2018 10:41 am
(@c-ideias)
Posts: 15
Active Member
Topic starter
 

boobymcgee obrigado pela resposta,
Mas a intenção é poder modificar o Range de acordo com o que eu alterar na chamada da função. Por exemplo:
- Como no exemplo textbox1, 2 e 3 com valores de H2, H3 e H4
- Em um outro caso se eu quiser atribuir ao textbox1, 2 e 3 os valores de outras células, modificar apenas mensagem1, mensagem2 e mensagem3 na chamada da função, sem ter que alterar na função em si.

 
Postado : 06/06/2018 10:50 am
(@boobymcgee)
Posts: 84
Trusted Member
 

Nesse caso é só alterar o valor das células "H2, H3 e H4", ou seja, ao invés de estar escrito mensagem1, mensagem2 e mensagem3 você indicar a célula alvo, por exemplo na "H2" colocar "=L11" na "H3" = "M15" e na "H4" = "P55", que vai puxar o valor destas células.

 
Postado : 06/06/2018 3:16 pm
(@c-ideias)
Posts: 15
Active Member
Topic starter
 

Boa noite meu caro,
Acho que demonstrei de forma errônea meu problema
Abaixo vou anexar um novo exemplo.
Com muitos dados eu gostaria de manter um function e alterar apenas as variáveis. Segue abaixo:

 
Postado : 06/06/2018 3:59 pm
(@boobymcgee)
Posts: 84
Trusted Member
 

Opa, nesse caso não sei como pode fazer.

 
Postado : 07/06/2018 8:55 am
(@c-ideias)
Posts: 15
Active Member
Topic starter
 

Bom dia pessoal. Alguém pra auxiliar? Obrigado

 
Postado : 08/06/2018 4:19 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Ao invés de:
UserForm1.TextBox1.Text = Sheets("Plan1").mensagem1.Value

Mude para
UserForm1.TextBox1.Text = mensagem1

e assim por diante.

Entretanto, conceitualmente vc não está fazendo um correto uso de uma Function. Na verdade isso que vc fez é pra ser uma Sub, não uma Function.

Uma Function retorna um valor para o nome dela mesma, embora não seja obrigatório. Então, em algum ponto dentro de uma Function, há pelo menos uma linha dando a ela algum valor. Ex.:

Function Teste(x,y)
'blá, blá, blá
'blá, blá, blá
Teste = x * y -2 *x
'blá, blá, blá
End Function

Dentro de outras Subs (ou outras Functions), essa Function aparecerá geralmente sendo usada do lado direito de alguma igualdade. Ex:

Sub Principal()
Dim Valor1, Valor2
'blá, blá, blá
'blá, blá, blá
Valor1 = Teste(3,8)
Valor2 = Teste(1,1)
'blá, blá, blá
End Sub

Se não ficou claro, retorne.

 
Postado : 08/06/2018 10:22 am
(@c-ideias)
Posts: 15
Active Member
Topic starter
 

Bom dia EdsonBr,

reformulei meu código e fiz algumas alterações intuitivamente e consegui resolver meu problema.
Se alguém mais tiver alguma dúvida semelhante estou postando o novo arquivo com a resolução da maneira que eu queria.
Abraço a todos e obrigado pelas sugestões que foram postadas ao longo do tópico.

 
Postado : 09/06/2018 9:55 pm