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

时间:2009-11-06 22:18:58

标签: excel ms-access vba

我正在尝试使用Excel中的VBA重命名访问表...任何帮助?

3 个答案:

答案 0 :(得分:9)

这是我的一个程序的例子(它仍然在公司的日常使用中)。它取自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

希望能提供帮助。

答案 1 :(得分:6)

怎么样:

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

答案 2 :(得分:0)

以上是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