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

我试图从Excel中使用VBA重命名访问表…任何帮助?

以下是我的一个程序的示例(该程序仍在日常使用中)。 它来自vb6程序,但也以vba执行。 我已经testing过了。

在这个例子中,我们有一个名为“mytable_tmp”的临时表,它用新的数据更新,我们希望通过replace它保存到表“mytable”。

从Excel VBA编辑器中,您需要设置对以下两个types库的引用:

  • “Microsoft ActiveX数据对象2.8库”
  • “Microsoft ADO Ext.2.8 for DDL and Security”

第一个是ADODB命名空间,第二个是ADOX命名空间。 (也许你有早期版本的2.5或更早版本的MDAC;这也可以)。

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 

希望能有所帮助。

怎么样:

 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 

这是上面Remou的代码的一个轻微的select。 我使用shell函数打开我需要的数据库,然后使用GetObject函数来访问它的属性和方法。 这样做的优点是1)您可以selectAccess应用程序的窗口将如何打开。 为了我的目的,我希望它被隐藏起来。 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