Estoy tratando de cambiar el nombre de una tabla de acceso usando VBA desde Excel ... ¿Alguna ayuda?¿Cómo cambiar el nombre de una tabla de acceso utilizando VBA desde Excel?
Respuesta
¿Qué tal:
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
Sería bueno si tu código se limpiara después de sí mismo, ¿no crees? –
@David W Fenton Tenía la impresión de que este era un foro donde las ideas deberían ser suficientes, en su mayor parte, y que incluso las respuestas de una línea serían suficientes. – Fionnuala
@David W Fenton si realmente crees que es tan importante, edita la respuesta y soluciónalos tú mismo –
He aquí un ejemplo de uno de mis programas (que todavía está en el uso diario en la empresa). Se toma de un programa vb6, pero también se ejecuta en vba. Lo he probado para estar seguro.
En este ejemplo, tenemos una tabla temporal con el nombre "mytable_tmp", que se actualiza con nuevos datos y nos gustaría guardar esto en la tabla "mytable" reemplazándolo.
Desde su editor de Excel VBA que necesita para establecer una referencia a los siguientes dos bibliotecas de tipos:
- "Microsoft ActiveX Data Objects 2.8 Library"
- "Microsoft ADO Ext 2.8 para DDL y. Seguridad "
La primera es para el espacio de nombres ADODB y la segunda para el espacio de nombres ADOX. (Tal vez tenga una versión anterior de MDAC como 2.5 o anterior; esto debería funcionar también).
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
Espero ser útil.
Me parece que el único valor de este código longing sobre las tres líneas de código de Remou es cuando no tienes Access instalado . –
También ofrece la opción de hacer más que solo una copia directa dentro del mismo código, y quién sabe, el usuario de Excel podría no tener acceso a Access. Aún así, en general, tengo que aceptar que el aspecto de Remou es más útil. – mavnn
;) ¿Cómo te atreves a incluir el manejo de errores y los mensajes de los usuarios? ¡Y de qué se trata todo ese formato! (Mucho más gracioso si lo haces en la voz de Stewie). +1 – JeffO
Aquí hay una pequeña alternativa al código de Remou anterior. Utilizo la función de shell para abrir la base de datos que necesito y luego la función GetObject para acceder a sus propiedades y métodos. Las ventajas de hacerlo de esta manera son 1) Puede seleccionar cómo se abrirá la ventana de la aplicación de Acceso. Para mis propósitos, quiero que esté oculto. 2) Tengo ambos Access 2003 y 2007 instalados y el método de Remou hace que se abra 2003, que no quiero. Mi método (creo) abre el archivo en cualquier versión de acceso que las ventanas hubieran utilizado para abrirlo si el usuario hubiera hecho doble clic en él.
El inconveniente es que debe asegurarse de que la base de datos esté abierta antes de intentar manipularla. Uso una subrutina de espera simple para tratar con esto, pero hay cosas más sofisticadas que puedes hacer.
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
- 1. Filtrar tabla dinámica de Excel utilizando VBA
- 2. Crear una tabla SQL de Excel VBA
- 3. Recuento de registros en la tabla de acceso utilizando VBA
- 4. Cómo proteger el libro de Excel utilizando VBA?
- 5. ¿Cómo generar XML desde una macro de Excel VBA?
- 6. Excel VBA: Guardar como activa el evento Cambiar en ComboBox
- 7. Subcadena de Excel VBA
- 8. Crear tabla de Excel utilizando Apache POI
- 9. EXcel VBA: Macro de Excel para crear una tabla en PowerPoint
- 10. pueblan valores únicos en una matriz de VBA desde Excel
- 11. ¿Cómo puedo hacer uso de objetos .NET desde Excel VBA?
- 12. Función de llamada a Excel VBA con nombre de variable
- 13. Exportación MS tablas de acceso a través de VBA a una hoja de cálculo de Excel en el mismo directorio
- 14. Abrir Google Chrome desde VBA/Excel
- 15. Obtenga el contenido de una carpeta sharepoint con Excel VBA
- 16. VBA - Generar archivo de Excel desde Access (QueryTable)
- 17. ¿Es posible cambiar el nombre de una tabla en Firebird?
- 18. Cómo acceder a Checkbox desde VBA en Excel 2007
- 19. Exportar tabla HTML a Excel utilizando ASP.NET
- 20. Exportación de una tabla HTML a Excel desde ASP.NET MVC
- 21. ¿Cómo llamo al cliente WCF desde Excel 2003 VBA?
- 22. Excel VBA - salida de bucle
- 23. C# excel cómo cambiar el color de una fila particular
- 24. Cambiar el nombre de la hoja de cálculo Evento en Excel
- 25. Renombrar archivos con Excel VBA
- 26. matriz en Excel VBA
- 27. ¿Cómo accedo a SQLite desde VBA?
- 28. ¿Cómo base64 codifica una cadena de manera eficiente utilizando Excel VBA?
- 29. Filtrado de matrices 2D en Excel VBA
- 30. Cómo llamar a un script Bash de VBA (Excel)
¿Por qué le gustaría? A menos que sea una tabla de datos temporales. –