Yeah, this confused me for a bit too.
You need to use reflection to use the name of the form to open it. I'm not very good at it yet. But I think this is heading in the right direction:
Dim myFormType As Type = Assembly.GetExecutingAssembly().GetType("myApp.myForm")
Dim frm As System.Windows.Forms.Form = DirectCast(Activator.CreateInstance(myFormType),System.Windows.Forms.Form)
frm.Show()
You might need to import System.Reflection for this code to compile.
There are methods to iterate over all of the methods or properties of a type given its name and also to call those methods/properties.
One last thing: if you intend to obfuscate your assembly, you can easily break any code using reflection. Specifically, if the name you form classes is changed, then the above code wouldn't work. You can tell the obfuscator not to rename a class (or properties or methods), so this isn't the end of the world. Just makes it harder.