Home > Mobile >  How do I make my subs() not change inputdata in Vba excel
How do I make my subs() not change inputdata in Vba excel

Time:02-05

When I call a sub and pass a variable, after the sub ends the passed variable is changed. How do I make it not do that?

So in the example the debug.print should be 3 not 8

sub main()
  i = 3
  SomeSub i
  debug.print i
end sub

sub SomeSub(j)
  j=j 5
end sub

CodePudding user response:

Just use the ByVal keyword to pass on the value

Sub SomeSub(ByVal j As Long)
  j = j   5
End Sub

Further reading

Using ByRef and ByVal

When we pass a simple variable to a procedure we can pass using ByRef or ByVal.

ByRef means we are passing the address of the variable. If the variable changes in the procedure the original will also be changed.

ByVal means we are creating a copy of the variable. If the variable changes in the procedure the original will not be changed.

  • Related