ALTERAR PARAMETROS VIA SUB OU FUNCAO

MARCOLACERA 27/05/2023 12:43:59
#501438
Preciso alterar varias variaveis declarada dentro de uma funcao, passando essas variaveis para uma sub, que vai alterar seus valores, ao retorna a funcao preciso dos valores alderados dentro na sub.


Exemplo:
  
Private Sub Command1_Click()
Dim x As String

x = "Marco"

MsgBox Marco

altera (x)

MsgBox lacera


End Sub


Private Sub altera(b As String)


b = "lacera"
End Sub




KERPLUNK 27/05/2023 15:49:56
#501439
Você precisa fazer uma function e não uma sub. Uma Sub não retorna nada, uma function sim:

private function altera(b as String)
dim retorno as string
retorno = "lacera"
Return retorno
end function
MARCOLACERA 29/05/2023 09:02:57
#501442
kerplunk, obrigado por responde!

Tanto FUNCAO como SUB retornam a alteração dos valores, basta fazer a chamada da forma que aguarde o retorno antes de seguir o processo, usando: Call altera (x), desta forma a funcao que fez a chamada vai aguardar a execução dos calculos.



WEBMASTER 29/05/2023 09:29:34
#501444
Usar duas subs interligadas para alterar o valor da primeira (com base no cenário que foi mostrado aqui) é uma lógica no mínimo duvidosa.
O que o Kerp respondeu faz todo sentido, se voce precisa receber X e no meio da rotina alterar X para Y e retornar Y, estamos falando de uma função.
MARCOLACERA 29/05/2023 10:22:25
#501446
No meu caso, preciso passar varios parametros "variaveis" e retornar esses com valores calculados.
LUIZCOMINO 29/05/2023 17:27:28
#501448
Alterado em 29/05/2023 17:46:41 utilize o byref

Private Sub Command1_Click()
Dim x As String
x = "Marco"
MsgBox Marco
altera (x)
MsgBox lacera
End Sub

Private Sub altera(byref b As String)
b = "lacera"
End Sub
WEBMASTER 29/05/2023 17:45:59
#501449
Resposta escolhida
Bom, tem varias formas de resolver isso.
Montei um exemplo bem lúdico, deve ajudar a entender o conceito (referenciar Microsoft Scripting Runtime no editor)


Sub teste()
Dim R As Integer
Dim C As Dictionary
Set C = New Dictionary

C.Add "entrada" & C.Count, 102
C.Add "saida" & C.Count, 23
C.Add "entrada" & C.Count, 112
C.Add "saida" & C.Count, 33
C.Add "estorno" & C.Count, 33
R = CalculeMe(C)
Debug.Print "O resultado e " & R
End Sub

Function CalculeMe(Items As Dictionary) As Integer
Dim R As Integer
Dim V As Integer
Dim K As Variant
R = 0

For Each K In Items.Keys
V = CInt(Items.Item(K))
If InStr(0, K, "entrada") > 0 Then
R = R + V
End If
If InStr(0, K, "saida") > 0 Then
R = R - V
End If
If InStr(0, K, "estorno") > 0 Then
R = R - (V + (V * 0.3))
End If
Next

CalculeMe = R
End Function
MARCOLACERA 30/05/2023 14:48:17
#501455
procedimento sanado! Obrigado a todos
Tópico encerrado , respostas não são mais permitidas