VB.NET: All optional variables have a constant default value. If no value is passed in, the argument will have the default value. You can manipulate it as much as you like, but when the procedure exits, your changes will be discarded. VB6: Optional arguments can have default values, in which case the same rules as VB.NET apply. If they don't have a default value, you will get an error when you try to access them. Use the IsMissing function to determine whether a value has been passed in.