View Single Post
  #5   Report Post  
Posted to microsoft.public.excel.programming
Jim Thomlinson Jim Thomlinson is offline
external usenet poster
 
Posts: 5,939
Default Cannot pass argument from control to sub and back

There are 2 ways to pass a variable. One is byref and the other is byval.
ByVal passes a copy of the variable to the sub and so any changes to the
variable are lost when the sub ends. By ref passes the acual variable so any
changes to the variable are kept in the calling procedure after the called
procedure ends.

While global variables can be handy be very judisious in their useage. They
are a pain to debug because if at any point the value is wrong it can be very
difficult to know which procedure modified it last...
--
HTH...

Jim Thomlinson


"Revolvr" wrote:

I'm at a loss here...

I have code associated with controls on a worksheet, which call
subroutines in other modules, and I am passing an argument, a string,
indicating the success or failure of the operations in that
subroutine. Then the string gets appended to a TextBox. But I am not
able to pass the string argument.

In Sheet1 I have
Private Sub dothings_Click()
'Dim smsg As String

Call messagetest(smsg)
€˜ Here if I check the value of smsg, it is empty.
NewMsg1 (smsg) €˜ writes to a text box

End Sub

The subroutine messagetest is in another module. Messagetest sets the
smsg string to a value, however when returning the value becomes an
empty string.

Sub messagetest(smsg As String)
smsg = "message test set this string"
End Sub

If this sub is in the same module as the sheet code, it works. I have
tried declaring smsg as public, but still doesn't work. I've tried
passign byval, still doesn't work.

Why is this and is it possible to pass arguments between code
associated with a worksheet, and modules?


Thanks!