In deze zelfstudie leert u werken met Access Tables met behulp van VBA.
Toegang tot VBA-tabellen
Om te beginnen zullen we de eenvoudige opdrachten demonstreren voor het werken met tabellen in Access. Verderop in deze tutorial laten we u volledige professioneel ontwikkelde functies zien voor het werken met tabellen in Access.
Tabel maken
Deze code gebruikt SQL om een tabel met de naam "Table1" te maken met de velden "ID" en "Name":
Dim table_name As String Dim velden As String table_name = "Table1" fields = "([ID] varchar(150), [Name] varchar(150))" CurrentDb.Execute "CREATE TABLE " & table_name & velden
Tabel sluiten
Deze regel VBA-code sluit een tabel (wijzigingen opslaan):
DoCmd.Close acTable, "Table1", acSaveYes
Een tabel sluiten zonder op te slaan:
DoCmd.Close acTable, "Table1", acSaveNo
Tabel verwijderen
Deze code verwijdert een tabel (let op: eerst moet de tabel worden gesloten):
DoCmd.Close acTable, "Table1", acSaveYes DoCmd.DeleteObject acTable = acDefault, "Table1"
Tabel hernoemen:
Deze regel code hernoemt een toegangstabel:
DoCmd.Rename "Table1", acTable, "Table1_New"
Een andere optie is het gebruik van de eigenschap TableDefs van een databaseobject.
Stel tdf = db.TableDefs(strOldTableName) in tdf.Name = strNewTableName
Tafel leegmaken / wissen
Deze VBA-code maakt een tabel leeg:
DoCmd.RunSQL "VERWIJDEREN * UIT " & "Tabel1"
Tabel afbreken / records verwijderen
Deze regel VBA-code gebruikt SQL om records uit een tabel te verwijderen die aan bepaalde criteria voldoen:
DoCmd.RunSQL ("VERWIJDEREN * VAN " & "Tabel1" & "WAAR" & "num=2")
Tabel exporteren naar Excel
Om een tabel naar Excel te exporteren, gebruik de DoCmd.OutputTo methode:
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c:\temp\ExportedTable.xls"
of gebruik de DoCmd.TransferSpreadsheet methode:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Table1", "c:\temp\ExportedTable.xls", True
Tabel bijwerken
De volgende code werkt een record bij, zonder het waarschuwingsbericht weer te geven:
DoCmd.SetWarnings (False) DoCmd.RunSQL "Update ProductsT SET ProductsT.ProductName = 'Product AAA' WHERE (((ProductsT.ProductID)=1))"
Toegang tot VBA-tabelfuncties
De bovenstaande codevoorbeelden zijn de eenvoudige opdrachten die u kunt gebruiken om te communiceren met tabellen met behulp van VBA. U zult echter vaak veel meer ondersteunende code (inclusief foutafhandeling) moeten toevoegen om deze opdrachten correct te gebruiken. Hieronder vindt u professioneel ontwikkelde functies voor het werken met tabellen in Access.
Tabelrecords tellen
Deze functie telt het aantal records in een tabel:
Public Function Count_Table_Records(TableName As String) As Integer On Error GoTo Err: Dim r As DAO.Recordset Dim c As Integer Set r = CurrentDb.OpenRecordset("Select count(*) as rcount from " & TableName).OpenRecordset If (r .EOF) Dan c = 0 Anders c = Nz(r!rCount, 0) End If Count_Table_Records = c Functie verlaten Err: Call MsgBox("Er is een fout opgetreden: " & Err.Description, vbExclamation, "Error") End Function ' Gebruiksvoorbeeld Private Sub Count_Table_Records_Example() MsgBox (Count_Table_Records("Table1")) End Sub
Controleer of de tabel bestaat Functie
Deze functie test of er een tabel bestaat en geeft TRUE of FALSE terug:
Public Function TableExists(ByVal strTableName As String) As Boolean 'Functie: Bepaal of de tabel bestaat in een Access-database 'Argumenten:strTablename: Naam van de tabel die moet worden gecontroleerd Dim tdf As DAO.TableDef On Error Resume Next Set tdf = CurrentDb.TableDefs(strTableName ) TableExists = (Err.Number = 0) Eindfunctie
Hier is een voorbeeld van de functie die wordt gebruikt:
Private Sub TableExists_Example() If VBA_Access_Checks.TableExists("Table") = True Then MsgBox ("Tabel is gevonden!") Else MsgBox ("Tabel is NIET gevonden!") End If End Sub
Tabelfunctie maken
Deze functie maakt een tabel in Access VBA in de huidige database:
Public Function CreateTable(table_fields As String, table_name As String) As Boolean Dim strCreateTable As String Dim intCount As Integer Dim strFields() As String Dim strValues() As String Dim strInsertSQL As String Dim intCounter As Integer Dimger OnData Ga als Integer Dimger OnData strFields = Split(table_fields, ",") strCreateTable = "CREATE TABLE " & table_name & "(" For intCounter = 0 To UBound(strFields) - 1 strCreateTable = strCreateTable & "[" & strFields(intCounter) & "] varchar( 150)," Next If Right(strCreateTable, 1) = "," Then strCreateTable = Left(strCreateTable, Len(strCreateTable) - 1) strCreateTable = strCreateTable & ")" End If CurrentDb.Execute strCreateTable intCounter = 0 intData = 0 If Err.Number = 0 Dan CreateTable = True Anders CreateTable = False End If Exit-functie Err: CreateTable = False MsgBox Err.Number & " " & Err.Description End-functie
Deze functie retourneert TRUE als de tabel met succes is gemaakt of FALSE als de tabel niet is gemaakt.
Je kunt de functie als volgt aanroepen:
Private Sub CreateTable_Example() Call CreateTable("f1,f2,f3,f4", "ttest") End Sub
Tabelfunctie verwijderen / neerzetten
Deze functie verwijdert een tabel als deze bestaat:
Openbare functie DeleteTableIfExists(TableName As String) If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'")) Dan DoCmd.SetWarnings False DoCmd.Close acTable, TableName, acSaveYes DoCmd. DeleteObject acTable = acDefault, TableName Debug.Print "Table" & TableName & "verwijderd… " DoCmd.SetWarnings True End If End Function
Je kunt de functie als volgt aanroepen:
Private Sub DeleteTableIfExists_Example() Bel DeleteTableIfExists("Table1") End Sub
Lege Tafel Functie
Deze functie maakt een tabel leeg als deze bestaat:
Openbare functie EmptyTable(TableName As String) If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'")) Dan DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM " & TableName Debug.Print "Tabel " & TableName & " leeggemaakt… " DoCmd.SetWarnings True End If End-functie
Je kunt de functie als volgt aanroepen:
Private Sub EmptyTable_Example() Roep EmptyTable("Table1") End Sub . aan
Tabelfunctie hernoemen
Deze VBA-functie hernoemt een tabel:
Public Function RenameTable (ByVal strOldTableName As String, ByVal strNewTableName As String, Optionele strDBPath As String) As Boolean Dim db As DAO.Database Dim tdf As TableDef ' Trap voor eventuele fouten. On Error Resume Next ' Als de databasenaam leeg is… If Trim$(strDBPath) = "" Dan '… stel dan Db in op de huidige Db. Set db = CurrentDb() Else ' Anders stelt u Db in op de opgegeven open database. Stel db = DBEngine.Workspaces(0).OpenDatabase(strDBPath) ' Kijk of er een fout is opgetreden. If Err Then 'MsgBox "Kon de database niet vinden om te openen: " & strDBPath RenameTable = False Exit Function End If End If If ObjectExists("Table", strOldTableName, strDBPath) Then Set tdf = db.TableDefs(strOldTableName) tdf.Name = strNewTableName db.Close RenameTable = True Anders RenameTable = False End If End Function 'Gebruiksvoorbeeld Private Sub RenameTable_Example() Roep RenameTable("table1", "table2") End Sub
Je kunt de functie als volgt aanroepen:
Private Sub RenameTable_Example() Bel RenameTable("table1", "table2") End Sub
Afkappen/verwijderen van records uit tabel
Deze functie verwijdert records uit een tabel met foutafhandeling:
Openbare functie Delete_From_Table (TableName As String, Criteria As String) Bij fout GoTo SubError DoCmd.SetWarnings False DoCmd.RunSQL ("DELETE * FROM " & TableName & " WHERE " & Criteria) DoCmd.SetWarnings True SubExit: Exit Function SubError ": Delete_From_Table error: " & vbCrLf & Err.Number & ": " & Err.Description Resume SubExit End Function 'Gebruiksvoorbeeld Public Sub Delete_From_Table_Example() Call Delete_From_Table("Table1", "num=2") End Sub
Tabel exporteren naar Excel
Deze regel code exporteert een tabel naar Excel (een nieuwe spreadsheet):
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c:\temp\ExportedTable.xls"
Of u kunt deze functie gebruiken:
Openbare functie Export_Table_Excel(TableName As String, FilePath As String) DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, True End Function 'Gebruiksvoorbeeld Sub Export_Table_Excel_Example () Export_Table_Excel("Table1", "c:\templs") Einde sub
De bovenstaande code wordt geëxporteerd naar een nieuwe spreadsheet. In plaats daarvan kunt u een tabel toevoegen aan een bestaand werkblad. Ons artikel over importeren / exporteren in Access VBA behandelt dit in meer detail.
Records aan een tabel toevoegen/toevoegen
Deze functie zal een record aan een tabel toevoegen/toevoegen:
Openbare functie Append_Record_To_Table (TableName As String, FieldName As String, FieldValue As String) On Error GoTo SubError Dim rs As DAO.Recordset Dim SQL As String Dim CurrentYear As Integer Set rs = CurrentDb.OpenRecordset(TableName) rs.AddNew rs(FieldName) .Value = FieldValue rs.Update rs.Close Set rs = Nothing SubExit: Exit Function SubError: MsgBox "RunSQL error: " & vbCrLf & Err.Number & ": " & Err.Description Resume SubExit End Function 'Gebruiksvoorbeeld Private Sub Append_Record_ampTo_Table () Roep Append_Record_To_Table("Table1", "num", 3) End Sub
Record aan tabel toevoegen vanuit formulier
Deze functie voegt een record toe aan een tabel vanuit een formulier:
Openbare functie Add_Record_To_Table_From_Form(TableName As String) On Error GoTo SubError Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(TableName) rs.AddNew 'rs![Field1] = Value1 'rs![Field2] = Value2 'rs![ Veld3] = Waarde3 rs.Update rs.Close Set rs = Nothing SubExit: Exit Function SubError: MsgBox "Refresh_Form error: " & vbCrLf & Err.Number & ": " & Err.Description End Function