我正在尝试创建一个临时表,向其附加一些字段,然后将其重命名为原始表。我正在使用下面的代码,但不确定它是否按预期工作。有时结果存在,有时不存在。
指令顺序有错吗?
Set tbl_copy = db.CreateTableDef("Temp")
db.Execute "SELECT * INTO [" & "Temp" & "] FROM [" & tblName & "]"
db.TableDefs.Delete tblName
Dim field_name As String
With tbl_copy
For col_id = 2 To named_range.Columns.Count
field_name = Format(named_range(1, col_id).Value, "m/d/yyyy")
.Fields.Append .CreateField(field_name, dbdata_type)
Next col_id
End With
db.TableDefs.Append tbl_copy
tbl_copy.name = tblName
如果您在 MsAccess 中托管 VBA,您可以使用 DoCmd 命令:
Const tblName As String = "<your original tablename here>"
Dim Col As Variant
'DoCmd.SetWarnings WarningsOn:=False ' you can use this line to suppress warning messages
On Error Resume Next
DoCmd.RunSQL ("DROP TABLE Temp")
On Error GoTo 0
DoCmd.RunSQL ("SELECT * INTO Temp FROM " & tblName)
For Each Col In Array("2/3/2020", "5/4/2021", "12/12/2022")
DoCmd.RunSQL ("ALTER TABLE Temp ADD COLUMN [" & Col & "] integer")
Next Col
DoCmd.RunSQL ("DROP TABLE " & tblName)
DoCmd.Rename NewName:=tblName, ObjectType:=acTable, OldName:="Temp"
我用数组模拟了你的EXCEL范围。 例如,如果表已经打开,建议您对可能会失败的语句添加更多的错误控制。
您当然可以使用您的 TableDefs 等方法实现相同的效果,但我需要更多时间来计算出确切的代码。