If you look at your code from a pure Object Oriented approach, Properties enforce the OO principle of encapsulation. By hiding your class member variables behind a Property, you hide the implementation details from the user of that class. For example: Your original code was:
Public MyNum as string
and you wanted to change it to store the variable as an integer instead, you would need to change every line of code that referenced that variable (assume Option Strict).
If instead you had used:
Private _MyNum as string
Property MyNum() as string
Get...
Set...
End Property
Now all the code that knows how this data is stored is isolated to this one place. You are free to use an Private storage mechanism and allow the Property Get/Set methods to do the appropriate conversions to/from string to ensure compatability with existing code.
I try to always expose member variables as properties because it allows me to keep my code consistent and I don't need to worry about future changes to the storage details from affecting any other code.