如何使用 Excel 中的 VBA 重命名访问表?

Posted

技术标签:

【中文标题】如何使用 Excel 中的 VBA 重命名访问表?【英文标题】:How to rename an Access Table using VBA from Excel? 【发布时间】:2009-11-06 22:18:57 【问题描述】:

我正在尝试使用 Excel 中的 VBA 重命名访问表...有什么帮助吗?

【问题讨论】:

您为什么要这样做?除非是临时数据表。 【参考方案1】:

这是我的一个程序中的一个示例(该程序仍在公司日常使用)。它取自 vb6 程序,但也在 vba 中执行。我已经测试过它可以确定。

在本例中,我们有一个名为“mytable_tmp”的临时表,该表已更新为新数据,我们希望通过替换将其保存到表“mytable”中。

您需要在 Excel vba 编辑器中设置对以下两个类型库的引用:

“Microsoft ActiveX 数据对象 2.8 库” “用于 DDL 和安全性的 Microsoft ADO Ext. 2.8”

第一个用于 ADODB 命名空间,第二个用于 ADOX 命名空间。 (也许您有早期版本的 MDAC,例如 2.5 或更早版本;这应该也可以)。

Private Sub RenameTable()
Dim cn         As New ADODB.Connection
Dim cat        As ADOX.Catalog
Const sDBFile  As String = "c:\et\dbtest.mdb"

   On Error GoTo ErrH

   With cn
      .Provider = "Microsoft.Jet.OLEDB.4.0"
      .Mode = adModeShareDenyNone
      .Properties("User ID") = "admin"
      .Properties("Password") = ""
      .Open sDBFile
   End With

   Set cat = New ADOX.Catalog
   cat.ActiveConnection = cn
   cat.Tables("mytable").Name = "mytable_old"
   cat.Tables("mytable_tmp").Name = "mytable"
   cat.Tables("mytable_old").Name = "mytable_tmp"

ExitHere:
   If Not cn Is Nothing Then
      If Not cn.State = adStateClosed Then cn.Close
      Set cn = Nothing
   End If
   Set cat = Nothing
   Exit Sub

ErrH:
Dim sMsg As String
   sMsg = "Massive problem over here man."
   sMsg = sMsg & vbCrLf & "Description : " & cn.Errors.Item(0).Description
   MsgBox sMsg, vbExclamation
   GoTo ExitHere
End Sub

希望对您有所帮助。

【讨论】:

在我看来,与 Remou 的三行代码相比,这段冗长的代码的唯一价值在于您没有安装 Access。 它还提供了在同一代码中执行更多操作的选项,而不仅仅是直接复制 - 谁知道,Excel 用户可能无法访问 Access。不过,总的来说,我不得不同意 Remou 看起来更实用。 ;) 你怎么敢包含错误处理和用户消息。以及所有这些格式是关于什么的! (如果你用 Stewie 的声音来做会更有趣)。 +1【参考方案2】:

怎么样:

Dim appAccess As Object
''acTable=0

Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "C:\Docs\LTD.mdb"

appAccess.DoCmd.Rename "NewTableName", 0, "OldTableName"

appAccess.Quit
Set appAccess = Nothing

【讨论】:

如果你的代码自己清理干净就好了,你不觉得吗? @David W Fenton 我的印象是,在大多数情况下,这个论坛的想法就足够了,即使是单行的答案也足够了。 @David W Fenton 如果您真的认为这很重要,请编辑答案并自己修复【参考方案3】:

这里是上面 Remou 代码的一个小替代方案。我使用 shell 函数打开我需要的数据库,然后使用 GetObject 函数访问它的属性和方法。这样做的好处是 1) 您可以选择如何打开 Access 应用程序的窗口。出于我的目的,我希望它被隐藏。 2) 我同时安装了 Access 2003 和 2007,并且 Remou 的方法导致 2003 打开,这是我不想要的。如果用户双击它,我的方法(我认为)会在任何版本的 Access 窗口中打开文件。

缺点是您必须在尝试操作数据库之前确保数据库已打开。我使用一个简单的等待子程序来处理这个问题,但是您可以做一些更复杂的事情。

Sub Rename()
    Dim ObjAccess As Object, MDB_Address As String, TaskID As Integer

    MDB_Address = "C:\example.mdb"

    TaskID = Shell("msaccess.exe " & Chr(34) & MDB_Address & Chr(34), vbHide)
    Call Wait
    Set ObjAccess = GetObject(MDB_Address)
    ObjAccess.DoCmd.Rename "NewTableName", 0, "OldTableName"
    ObjAccess.Quit
    Set ObjAccess = Nothing

End Sub

Sub Wait()

    Dim nHour As Date, nMinute As Date, nSecond As Date, waitTime As Date

    nHour = Hour(Now())
    nMinute = Minute(Now())
    nSecond = Second(Now()) + 5
    waitTime = TimeSerial(nHour, nMinute, nSecond)
    Application.Wait waitTime

End Sub

【讨论】:

以上是关于如何使用 Excel 中的 VBA 重命名访问表?的主要内容,如果未能解决你的问题,请参考以下文章

使用Excel VBA,如何将某一个工作表保存到新建的Excel中?

在 vba 中复制和重命名 Excel ActiveSheet

excel vba复制数据范围,打开新的xlsx文件重命名表并保存

用vba新建工作表,并命名

使用 Excel VBA 重命名文件

根据访问表第一个字段重命名 excel 文件