ALTERAR PARAMETROS VIA SUB OU FUNCAO
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:
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
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
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.
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.
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.
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.
No meu caso, preciso passar varios parametros "variaveis" e retornar esses com valores calculados.
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
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)
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
procedimento sanado! Obrigado a todos
Tópico encerrado , respostas não são mais permitidas