You can store each field the user selects to memory variables and build the statement using macro substitution.
Assume the table had 5 fields - Field1 to field5 and the user selects field1, field3 and field5.
IF mfield1 = .t.
mselfields = ' field1 '
ENDIF
IF mfield2 = .t.
mselfields = mselfields + iif(empty(mselfields),'field2 ',',field2 ')
ENDIF
IF mfield3 = .t.
mselfields = mselfields + iif(empty(mselfields),'field3 ',',field3 ')
ENDIF
IF mfield4 = .t.
mselfields = mselfields + iif(empty(mselfields),'field4 ',',field4 ')
ENDIF
IF mfield5 = .t.
mselfields = mselfields + iif(empty(mselfields),'field5 ',',field5 ')
ENDIF
****Error code - if no fields selected etc.
To copy only structure with specific fields to another table:
use oldtable
copy structure to newtable fields &mselfields
To copy specific fields with data to another table:
use oldtable
copy fields &mselfields to newtable