Access VBA Tables – Update, Count, Delete, Create, Rename, Export
This tutorial will teach you how to work with Access Tables using VBA.
Access VBA Tables
To start we will demonstrate the simple commands for working with Tables in Access. Later in this tutorial we will show you full professionally developed functions for working with tables in Access.
Create Table
This code will use SQL to create a table named "Table1" with fields "ID" and "Name":
Dim table_name As String
Dim fields As String
table_name = "Table1"
fields = "([ID] varchar(150), [Name] varchar(150))"
CurrentDb.Execute "CREATE TABLE " & table_name & fields
Close Table
This line of VBA code will close a Table (saving changes):
DoCmd.Close acTable, "Table1", acSaveYes
To close a Table without saving:
DoCmd.Close acTable, "Table1", acSaveNo
Delete Table
This code will delete a Table (note: first the Table should be closed):
DoCmd.Close acTable, "Table1", acSaveYes
DoCmd.DeleteObject acTable = acDefault, "Table1"
Rename Table:
This line of code will rename an Access Table:
DoCmd.Rename "Table1", acTable, "Table1_New"
Another option is using the TableDefs property of a database object.
Set tdf = db.TableDefs(strOldTableName)
tdf.Name = strNewTableName
Empty / Clear Table
This VBA code will empty a Table:
DoCmd.RunSQL "DELETE * FROM " & "Table1"
Truncate Table / Delete Records
This line of VBA code uses SQL to delete records from a table that meet certain criteria:
DoCmd.RunSQL ("DELETE * FROM " & "Table1" & " WHERE " & "num=2")
Export Table to Excel
To export a Table to Excel use the DoCmd.OutputTo method:
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c:\temp\ExportedTable.xls"
or use the DoCmd.TransferSpreadsheet method:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Table1", "c:\temp\ExportedTable.xls", True
Update Table
The following code will update a record, without displaying the warning message:
DoCmd.SetWarnings (False)
DoCmd.RunSQL "Update ProductsT SET ProductsT.ProductName = 'Product AAA' WHERE (((ProductsT.ProductID)=1))"
Access VBA Table Functions
The above code examples are the simple commands you can use to interact with Tables using VBA. However, you will often need to add much more supporting code (including error handling) to properly utilize these commands. Below you will find professionally develop functions for working with Tables in Access.
Count Table Records
This function will count the number of records in a table:
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) Then
c = 0
Else
c = Nz(r!rCount, 0)
End If
Count_Table_Records = c
Exit Function
Err:
Call MsgBox("An error occured: " & Err.Description, vbExclamation, "Error")
End Function
'Usage Example
Private Sub Count_Table_Records_Example()
MsgBox (Count_Table_Records("Table1"))
End Sub
Check if Table Exists Function
This Function will test if a table exists, returning TRUE or FALSE:
Public Function TableExists(ByVal strTableName As String) As Boolean
'Function: Determine if table exists in an Access database
'Arguments:strTablename: Name of table to check
Dim tdf As DAO.TableDef
On Error Resume Next
Set tdf = CurrentDb.TableDefs(strTableName)
TableExists = (Err.Number = 0)
End Function
Here is an example of the function in use:
Private Sub TableExists_Example()
If VBA_Access_Checks.TableExists("Table") = True Then
MsgBox ("Table was found!")
Else
MsgBox ("Table was NOT found!")
End If
End Sub
Create Table Function
This function will create a Table in Access VBA in the Current 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
Dim intData As Integer
On Error GoTo Err
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 Then
CreateTable = True
Else
CreateTable = False
End If
Exit Function
Err:
CreateTable = False
MsgBox Err.Number & " " & Err.Description
End Function
This Function will return TRUE if the table is created successfully or FALSE if the table is not created.
You can call the function like this:
Private Sub CreateTable_Example()
Call CreateTable("f1,f2,f3,f4", "ttest")
End Sub
Delete / Drop Table Function
This function will delete a table if it exists:
Public Function DeleteTableIfExists(TableName As String)
If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'")) Then
DoCmd.SetWarnings False
DoCmd.Close acTable, TableName, acSaveYes
DoCmd.DeleteObject acTable = acDefault, TableName
Debug.Print "Table " & TableName & " deleted..."
DoCmd.SetWarnings True
End If
End Function
You can call the function like this:
Private Sub DeleteTableIfExists_Example()
Call DeleteTableIfExists("Table1")
End Sub
Empty Table Function
This function will empty a table if it exists:
Public Function EmptyTable(TableName As String)
If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'")) Then
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM " & TableName
Debug.Print "Table " & TableName & " emptied..."
DoCmd.SetWarnings True
End If
End Function
You can call the function like this:
Private Sub EmptyTable_Example()
Call EmptyTable("Table1")
End Sub
Rename Table Function
This VBA function will rename a table:
Public Function RenameTable(ByVal strOldTableName As String, ByVal strNewTableName As String, Optional strDBPath As String) As Boolean
Dim db As DAO.Database
Dim tdf As TableDef
' Trap for any errors.
On Error Resume Next
' If the database name is empty...
If Trim$(strDBPath) = "" Then
' ...then set Db to the current Db.
Set db = CurrentDb()
Else
' Otherwise, set Db to the specified open database.
Set db = DBEngine.Workspaces(0).OpenDatabase(strDBPath)
' See if an error occurred.
If Err Then
'MsgBox "Could not find database to open: " & 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
Else
RenameTable = False
End If
End Function
'Usage Example
Private Sub RenameTable_Example()
Call RenameTable("table1", "table2")
End Sub
You can call the function like this:
Private Sub RenameTable_Example()
Call RenameTable("table1", "table2")
End Sub
Truncate / Delete Records from Table
This function will delete records from a table with error handling:
Public Function Delete_From_Table(TableName As String, Criteria As String)
On Error GoTo SubError
DoCmd.SetWarnings False
DoCmd.RunSQL ("DELETE * FROM " & TableName & " WHERE " & Criteria)
DoCmd.SetWarnings True
SubExit:
Exit Function
SubError:
MsgBox "Delete_From_Table error: " & vbCrLf & Err.Number & ": " & Err.Description
Resume SubExit
End Function
'Usage Example
Public Sub Delete_From_Table_Example()
Call Delete_From_Table("Table1", "num=2")
End Sub
Export Table to Excel
This line of code will export a Table to Excel (a new spreadsheet):
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c:\temp\ExportedTable.xls"
Or you can use this function:
Public Function Export_Table_Excel(TableName As String, FilePath As String)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, True
End Function
'Usage Example
Sub Export_Table_Excel_Example ()
Export_Table_Excel("Table1", "c:\temp\ExportedTable.xls")
End Sub
The above code will export to a new spreadsheet. Instead you can add a table to an existing spreadsheet. Our article on Importing / Exporting in Access VBA covers this in more detail.
Add / Append Records to a Table
This function will add / append a record to a table:
Public Function 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
'Usage Example
Private Sub Append_Record_To_Table_Example()
Call Append_Record_To_Table("Table1", "num", 3)
End Sub
Add Record to Table From Form
This function will add a record to a table from a form:
Public Function 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![Field3] = Value3
rs.Update
rs.Close
Set rs = Nothing
SubExit:
Exit Function
SubError:
MsgBox "Refresh_Form error: " & vbCrLf & Err.Number & ": " & Err.Description
End Function