访问VBA代码以删除表(如果存在)

Hil*_*ly1 6 vba access-vba

首先,我必须承认,我没有受过VBA编码的培训.我使用MS Access宏和查询来构建我的应用程序.我使用一些临时导入文件,并且需要运行一个宏或一些VBA来测试它们是否存在,然后如果它们存在,则删除它们.

我的表名是"TempImport1"

我通过谷歌搜索研究了这个,并且遇到了一些可能有效的VBA,但我想知道如何将代码放入模块或点击子按钮.我过去在按钮功能下剪切/粘贴了VBA代码,但它确实有效,但我无法弄清楚为什么这次没有工作.

老实说,我确信这是我对私人与公共职能缺乏了解,当然还有我不了解VBA的事实.

这是我正在努力工作的代码:

Function IsTable(sTblName As String) As Boolean
    'does table exists and work ?
    'note: finding the name in the TableDefs collection is not enough,
    '      since the backend might be invalid or missing

    On Error GoTo TrapError
    Dim x
    x = DCount("*", sTblName)
    IsTable = True
    Exit Function
TrapError:
    Debug.Print Now, sTblName, Err.Number, Err.Description
    IsTable = False

End Function
Run Code Online (Sandbox Code Playgroud)

Vit*_*ata 7

首先,您应该检查表是否存在,然后您应该尝试关闭它(如果存在).然后,您应该将警告设置为False,因此它不会询问您是否确定要删除该表.

在下面的示例中,您将删除Table3.在If Not IsNull被检查表是否存在:

Option Compare Database
Option Explicit

Public Sub DeleteIfExists()

    Dim tableName As String
    tableName = "Table3"

    If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & tableName & "'")) Then
        DoCmd.SetWarnings False
        DoCmd.Close acTable, tableName, acSaveYes
        DoCmd.DeleteObject acTable = acDefault, tableName
        Debug.Print "Table" & tableName & "deleted..."
        DoCmd.SetWarnings True
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

几乎代码应该工作.


Chr*_*isM 7

要删除TempImport1表(如果存在),只需使用以下函数。

Function DeleteTables()

    If Not IsNull(DLookup("Name", "MSysObjects", "Name='TempImport1' AND Type = 1")) Then
    DoCmd.DeleteObject acTable, "TempImport1"
    End If

End Function
Run Code Online (Sandbox Code Playgroud)

创建函数后,创建一个宏,添加操作运行代码,然后输入DeleteTables()函数名称。
然后,您可以运行一个宏来删除该表(如果它存在)。