Sto provando a rinominare un Access Table usando VBA da Excel ... qualche aiuto?Come rinominare una tabella di accesso tramite VBA da Excel?
risposta
ne dite:
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
Sarebbe bello se il tuo codice fosse ripulito da solo, non credi? –
@David W Fenton Ho avuto l'impressione che questo fosse un forum in cui le idee dovrebbero essere sufficienti, per la maggior parte e che anche le risposte su una sola riga sarebbero sufficienti. – Fionnuala
@David W Fenton se pensi davvero che sia così importante, modifica la risposta e correggi te stesso –
Ecco un esempio di uno dei miei programmi (che è ancora in uso quotidiano in azienda). È preso da un programma vb6, ma viene eseguito anche in vba. L'ho provato per essere sicuro.
In questo esempio abbiamo una tabella temporanea con il nome "mytable_tmp", che viene aggiornato con nuovi dati e vorremmo salvare questo nella tabella "mytable" sostituendolo.
dal vostro editor di Excel VBA è necessario impostare un riferimento alle seguenti due librerie dei tipi:
- "Microsoft ActiveX Data Objects 2.8 Library"
- "Microsoft ADO Ext 2,8 per DDL e. Sicurezza "
Il primo è per lo spazio dei nomi ADODB e il secondo per lo spazio dei nomi ADOX. (Forse hai una versione precedente di MDAC come 2.5 o precedenti, anche questo dovrebbe funzionare).
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
Sperando di essere utile.
Mi sembra che l'unico valore di questo codice esteso lungo le tre righe di codice di Remou riguardi quando non hai installato Access . –
Offre anche la possibilità di fare più di una semplice copia nello stesso codice - e chissà, l'utente di Excel potrebbe non avere accesso ad Access. Comunque, in generale, devo riconoscere che l'aspetto di Remou è più utilizzabile. – mavnn
;) Come osi includere la gestione degli errori e i messaggi degli utenti. E che cos'è tutta questa formattazione! (Molto più divertente se lo fai nella voce di Stewie). +1 – JeffO
Ecco una piccola alternativa al codice di Remou sopra. Uso la funzione shell per aprire il database di cui ho bisogno e quindi la funzione GetObject per accedere alle sue proprietà e ai suoi metodi. I vantaggi di farlo in questo modo sono 1) È possibile selezionare il modo in cui si aprirà la finestra per l'applicazione Access. Per i miei scopi, voglio che sia nascosto. 2) Ho installato sia Access 2003 che 2007 e il metodo di Remou causa l'apertura del 2003, che non desidero. Il mio metodo (penso) apre il file in qualsiasi versione di Access che Windows avrebbe usato per aprirlo se l'utente avesse fatto doppio clic su di esso.
Lo svantaggio è che è necessario assicurarsi che il database sia aperto prima di tentare di manipolarlo. Io uso una subroutine di attesa semplice per affrontare questo, ma ci sono cose più sofisticate che puoi fare.
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. Accesso iniziale da Excel VBA
- 2. Connessione di Excel a PostgreSQL tramite VBA
- 3. EXBA VBA: Excel Macro per creare una tabella in PowerPoint
- 4. Database Accesso SQL in Excel-VBA
- 5. Aggiunta di testo a una cella in Excel tramite VBA
- 6. Avvio di TransactionScope da Excel VBA?
- 7. Excel VBA - Rimuovi righe vuote nella tabella
- 8. Come generare XML da una macro VBA di Excel?
- 9. Come chiamare metodi .NET da Excel VBA
- 10. Excel VBA Apre una cartella
- 11. Ridenominazione di file con Excel VBA
- 12. Filtra la tabella pivot di Excel utilizzando VBA
- 13. come rinominare una tabella senza ricrearla
- 14. Elimina foglio di lavoro in Excel tramite VBA
- 15. Inserimento in una stringa VBA di Excel
- 16. Come rinominare una colonna di una tabella in Oracle 10g
- 17. Excel: come verificare se una cella è vuota con VBA?
- 18. Esegui file .bat da Excel VBA Macro
- 19. Alternativa all'editor VBA di Excel?
- 20. Flushing delle modifiche apportate a VBProject.VBComponents in Excel tramite VBA
- 21. matrice in Excel VBA
- 22. Memoria mancanza di Excel VBA
- 23. Accesso alle enumerazioni di parole VBA standard
- 24. Bug in VBA DateValue() in VBA Excel?
- 25. Come posso rinominare la mia colonna in una tabella SQL?
- 26. Excel VBA a C#
- 27. Come posso importare a livello di codice i dati di Excel in una tabella di accesso?
- 28. Rinomina foglio Excel con macro VBA
- 29. come creare una tabella da un foglio Excel?
- 30. Accesso a tipi di add-in per applicazioni VSTO da VBA (Excel)
Perché vuoi? A meno che non sia una tabella di dati temporanea. –