I really don't know why the codes in my question won't run but I try using this an it works...
Public Sub CreateDatabaseADO(ByRef dbCon As DatabaseConn)
Dim newDB As ADOX.Catalog
Set newDB = New ADOX.Catalog
newDB.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & dbCon.path & _
";Jet OLEDB:Engine Type=5;"
Set newDB = Nothing
Dim DBX As ADOX.Catalog
Set DBX = New ADOX.Catalog
DBX.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & dbCon.path
Dim i As Integer
For i = 0 To UBound(dbCon.TableArr)
Dim tblNew As ADOX.Table
Set tblNew = New ADOX.Table
Set tblNew.ParentCatalog = DBX
tblNew.Name = dbCon.TableArr(i).Name
Dim j As Integer
For j = 0 To UBound(dbCon.TableArr(i).FieldArr)
Dim DataType As Integer
If dbCon.TableArr(i).FieldArr(j).FieldDataType = DataTypes.Memo Then
DataType = adLongVarWChar
ElseIf dbCon.TableArr(i).FieldArr(j).FieldDataType = DataTypes.Number Then
DataType = adInteger
ElseIf dbCon.TableArr(i).FieldArr(j).FieldDataType = DataTypes.Date Then
DataType = adDate
Else
DataType = adVarWChar
End If
If dbCon.TableArr(i).FieldArr(j).AutoIncrement And DataType = adInteger Then
tblNew.Columns.Append dbCon.TableArr(i).FieldArr(j).Name, adInteger
tblNew.Columns.Item(dbCon.TableArr(i).FieldArr(j).Name) .Properties("AutoIncrement").Value = True
Else
Dim col As ADOX.Column
Set col = New ADOX.Column
col.Name = dbCon.TableArr(i).FieldArr(j).Name
col.Type = DataType
col.Attributes = adColNullable
If DataType = adVarWChar Then col.DefinedSize = dbCon.TableArr(i).FieldArr(j).Size
tblNew.Columns.Append col
Set col = Nothing
End If
If UCase(dbCon.TableArr(i).FieldArr(j).Name) = UCase(dbCon.TableArr(i).IndexName) Then
Dim ind As ADOX.Index
Set ind = New ADOX.Index
ind.Name = dbCon.TableArr(i).FieldArr(j).Name
ind.PrimaryKey = dbCon.TableArr(i).PrimaryKey
ind.Columns.Append dbCon.TableArr(i).FieldArr(j).Name
tblNew.Indexes.Append ind
Set ind = Nothing
End If
Next j
DBX.Tables.Append tblNew
Set tblNew = Nothing
Next i
Set DBX = Nothing
End Sub