En aquest tema, aprendrem com accedir a bases de dades des de VBA. Això és especialment útil quan necessitem treballar amb grans volums de dades que es troben emmagatzemades en bases de dades externes. Utilitzarem ADO (ActiveX Data Objects) per establir connexions i manipular dades.
- Introducció a ADO
ADO és una biblioteca que permet accedir a dades emmagatzemades en diverses fonts de dades, com ara bases de dades SQL Server, Access, i altres. ADO proporciona una interfície per connectar-se a la base de dades, executar consultes SQL i manipular els resultats.
Conceptes clau:
- Connexió: Establir una connexió amb la base de dades.
- Comandament: Executar instruccions SQL.
- Registre: Manipular els resultats de les consultes.
- Configuració de l'entorn
Abans de començar a treballar amb ADO, hem d'assegurar-nos que la biblioteca ADO estigui referenciada en el nostre projecte VBA.
Passos per referenciar ADO:
- Obre l'Editor VBA (Alt + F11).
- Ves a
Eines
>Referències
. - Cerca i selecciona
Microsoft ActiveX Data Objects x.x Library
(on x.x és la versió de la biblioteca).
- Establir una connexió amb la base de dades
Per establir una connexió amb una base de dades, necessitem una cadena de connexió que contingui la informació necessària per connectar-nos a la base de dades.
Exemple de codi:
Sub ConnectToDatabase() Dim conn As Object Set conn = CreateObject("ADODB.Connection") Dim connectionString As String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\database.accdb;" conn.Open connectionString If conn.State = 1 Then MsgBox "Connexió establerta correctament!" Else MsgBox "No s'ha pogut establir la connexió." End If conn.Close Set conn = Nothing End Sub
Explicació del codi:
- CreateObject("ADODB.Connection"): Crea una instància de l'objecte de connexió ADO.
- connectionString: Conté la informació necessària per connectar-se a la base de dades.
- conn.Open: Estableix la connexió amb la base de dades.
- conn.State: Verifica l'estat de la connexió (1 significa que la connexió està oberta).
- conn.Close: Tanca la connexió.
- Executar consultes SQL
Un cop establerta la connexió, podem executar consultes SQL per recuperar o manipular dades.
Exemple de codi per executar una consulta SELECT:
Sub ExecuteSelectQuery() Dim conn As Object Dim rs As Object Set conn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") Dim connectionString As String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\database.accdb;" conn.Open connectionString Dim sql As String sql = "SELECT * FROM YourTable" rs.Open sql, conn Do While Not rs.EOF Debug.Print rs.Fields("YourFieldName").Value rs.MoveNext Loop rs.Close conn.Close Set rs = Nothing Set conn = Nothing End Sub
Explicació del codi:
- rs.Open sql, conn: Executa la consulta SQL i emmagatzema els resultats en l'objecte Recordset.
- rs.EOF: Comprova si s'ha arribat al final del Recordset.
- rs.Fields("YourFieldName").Value: Accedeix al valor d'un camp específic en el Recordset.
- rs.MoveNext: Mou el cursor al següent registre del Recordset.
- Manipular dades
A més de recuperar dades, també podem inserir, actualitzar i eliminar registres en la base de dades.
Exemple de codi per inserir un registre:
Sub InsertRecord() Dim conn As Object Set conn = CreateObject("ADODB.Connection") Dim connectionString As String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\database.accdb;" conn.Open connectionString Dim sql As String sql = "INSERT INTO YourTable (FieldName1, FieldName2) VALUES ('Value1', 'Value2')" conn.Execute sql conn.Close Set conn = Nothing End Sub
Explicació del codi:
- conn.Execute sql: Executa la instrucció SQL per inserir un nou registre en la taula especificada.
Exercicis pràctics
Exercici 1: Establir una connexió
Escriu un codi VBA que estableixi una connexió amb una base de dades Access i mostri un missatge si la connexió és exitosa.
Exercici 2: Executar una consulta SELECT
Escriu un codi VBA que executi una consulta SELECT per recuperar tots els registres d'una taula i mostri els valors d'un camp específic en la finestra de depuració.
Exercici 3: Inserir un registre
Escriu un codi VBA que insereixi un nou registre en una taula de la base de dades.
Solucions
Solució a l'Exercici 1:
Sub Exercise1() Dim conn As Object Set conn = CreateObject("ADODB.Connection") Dim connectionString As String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\database.accdb;" conn.Open connectionString If conn.State = 1 Then MsgBox "Connexió establerta correctament!" Else MsgBox "No s'ha pogut establir la connexió." End If conn.Close Set conn = Nothing End Sub
Solució a l'Exercici 2:
Sub Exercise2() Dim conn As Object Dim rs As Object Set conn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") Dim connectionString As String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\database.accdb;" conn.Open connectionString Dim sql As String sql = "SELECT * FROM YourTable" rs.Open sql, conn Do While Not rs.EOF Debug.Print rs.Fields("YourFieldName").Value rs.MoveNext Loop rs.Close conn.Close Set rs = Nothing Set conn = Nothing End Sub
Solució a l'Exercici 3:
Sub Exercise3() Dim conn As Object Set conn = CreateObject("ADODB.Connection") Dim connectionString As String connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\database.accdb;" conn.Open connectionString Dim sql As String sql = "INSERT INTO YourTable (FieldName1, FieldName2) VALUES ('Value1', 'Value2')" conn.Execute sql conn.Close Set conn = Nothing End Sub
Conclusió
En aquest tema, hem après com accedir a bases de dades des de VBA utilitzant ADO. Hem vist com establir una connexió, executar consultes SQL i manipular dades. Aquests coneixements ens permetran treballar amb dades emmagatzemades en bases de dades externes de manera eficient i efectiva. En el proper tema, explorarem com utilitzar VBA per controlar PowerPoint.
Curs de VBA (Visual Basic for Applications)
Mòdul 1: Introducció a VBA
Mòdul 2: Conceptes bàsics de VBA
- Variables i tipus de dades
- Operadors en VBA
- Estructures de control: If...Then...Else
- Bucles: For, While, Do Until
- Treballar amb arrays
Mòdul 3: Treballar amb objectes d'Excel
- Comprendre el model d'objectes d'Excel
- Treballar amb llibres i fulls de càlcul
- Manipulació de cel·les i rangs
- Utilitzar l'objecte Range
- Formatar cel·les amb VBA
Mòdul 4: Programació avançada en VBA
- Crear i utilitzar funcions
- Gestió d'errors en VBA
- Tècniques de depuració
- Treballar amb UserForms
- Programació basada en esdeveniments
Mòdul 5: Interactuar amb altres aplicacions
- Automatitzar Word amb VBA
- Automatitzar Outlook amb VBA
- Accedir a bases de dades amb VBA
- Utilitzar VBA per controlar PowerPoint
Mòdul 6: Millors pràctiques i optimització
- Escriure codi VBA eficient
- Tècniques de refactorització de codi
- Documentar el teu codi
- Control de versions per a projectes VBA