从Excel VBA-检查访问表是否存在/如果不存在,则创建/复制

时间:2019-01-14 01:54:33

标签: excel vba ms-access

我正在通过Excel在VBA中使用Access数据库。我想检查数据库中是否存在一个表,如果不存在,我想使用与该数据库中标有“空白”的表相同的字段/定义创建该表。我可以根据需要简单地复制/重命名空白。

我找到了一种使用以下方法检查表是否存在的方法(不确定是否是最好的方法)。

Set objCatalog = CreateObject("ADOX.catalog")
objCatalog.ActiveConnection = dbConn
For i = 0 To objCatalog.Tables.Count - 1
    If objCatalog.Tables.Item(i).Name = tbName Then tbExists = True
Next

这可行,但是当目标表不存在(tbExists = False)时,我正在努力寻找一种使用Blank的字段/定义复制或创建新表的方法。

3 个答案:

答案 0 :(得分:1)

这可能是通过检查表定义是否返回任何东西来检查表是否存在的另一种方法。

TableDef对象代表基本表或链接表的存储定义(仅Microsoft Access工作区)。

Set exampleDB = workSpace.OpenDatabase(DatabaseName)

Set tableDefinition = exampleDB.TableDefs(TableName)
tableExists = Err.Number = 0

更多信息

https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/tabledef-object-dao

答案 1 :(得分:0)

这对我有用:

Range

不执行其他操作(例如“压缩和修复”或“关闭/重新打开”数据库或在导航窗格中选择表的运行代码或以某种方式刷新窗格(隐藏/取消隐藏窗格会执行此操作),新表实际上不会显示在导航窗格中。 )。

某些字段属性设置不会被保留(AllowZeroLength =否)。计算类型字段和多值字段都会导致运行时错误。

DoCmd.CopyObject和DoCmd.TransferDatabase可以完全复制表。 DoCmd.Rename可以简单地重命名表。所有这些都需要声明并打开Access数据库对象变量的代码。

答案 2 :(得分:0)

从excel vba创建访问对象

Sub TableExistOrCreate()

    Dim appAccess As Object, tbl As Object
    Set appAccess = CreateObject("Access.Application")

    appAccess.OpenCurrentDatabase ("C:\Users\santosh\Desktop\test.accdb")

    On Error Resume Next
    Set tbl = appAccess.currentdata.AllTables("Test")
    On Error GoTo 0

    If tbl Is Nothing Then
        appAccess.docmd.CopyObject , "Test", 0, "Blank"
    End If

    Set appAccess = Nothing

End Sub