如何使用Excel中的VBA重命名Access表格?

6

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


1
为什么你想要这样做?除非它是一个临时数据表。 - Tony Toews
3个回答

9
下面是一个来自我的程序的示例(该程序仍在公司日常使用中)。它取自vb6程序,但也可以在vba中执行。我已经进行了测试以确保其准确无误。
在这个示例中,我们有一个名为“mytable_tmp”的临时表,其中包含更新的新数据,我们希望通过替换来保存到表“mytable”中。
从您的Excel vba编辑器中,您需要引用以下两个类型库:
- “Microsoft ActiveX Data Objects 2.8 Library” - “Microsoft ADO Ext. 2.8 for DDL and Security”
第一个是用于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
在我看来,这段冗长的代码唯一比Remou的三行代码更有价值的地方就是当你没有安装Access时。 - David-W-Fenton
它还提供了除了在同一代码中进行直接复制之外的更多选项 - 而且谁知道,Excel用户可能没有访问Access。尽管如此,总的来说我必须同意Remou的看起来更可用。 - mavnn
你居然加入了错误处理和用户提示,还有那些格式化是怎么回事!(如果你用Stewie的声音说会更有趣)+1 - JeffO

7
如何呢:
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

1
你觉得如果你的代码自己清理干净会很好,不是吗? - David-W-Fenton
2
@David W Fenton 我的印象是这是一个论坛,大多数情况下应该足够提供想法,即使只有一行答案也足够。 - Fionnuala
1
@David W Fenton如果你真的认为这很重要,那就编辑答案并自己修复它。 - Christian Payne

0

这里是对Remou上面代码的轻微改进。我使用shell函数打开所需的数据库,然后使用GetObject函数访问其属性和方法。这样做的优点是: 1)您可以选择如何打开Access应用程序的窗口。对于我的目的,我希望它是隐藏的。 2)我安装了Access 2003和2007,Remou的方法会导致2003打开,而我不想要。我的方法(我认为)会在Windows中打开文件,无论用户是否双击它。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接