Certainly it can be done.
Basically you build a string witha Create Table statement in it and then execute it.
e.g.
someSql "Create Table " + EditBox1.Text + "(.....)"
BUT
Building sql from user input opens you to sql injection attacks.
Legal identifiers, certain characters can't be used, some must be escaped, the name may already be in use...
Once you have the table, how is the code going to use it, to know that there is a table called "MyTable" in the database, why it's there...
You wouldn't normally just hand out create table permissions.
What about dependencies (relations, stored procs, contraints etc)
There are several ways of dealing with this, one is to do table creation in another app, build up rules and store meta information somehow that the code can use to use the table.
Another for simpler apps, is to give the table some unique name in the db and then use the the name entered by the user as an alias for it, so Show("MyTable") gets mapped to Show("UserTable1876")
Another possibility is if the table has definite common structure and it's just user Fred's copy of it is to add another column to the table and then simply add Fred's UserID when any CRUD functions are used.
So yes it can be done, should it? Depends....