Denna handledning lär dig hur du arbetar med åtkomsttabeller med VBA.
Öppna VBA -tabeller
Till att börja med kommer vi att visa de enkla kommandona för att arbeta med Tabeller i Access. Senare i denna handledning kommer vi att visa dig fullständigt professionellt utvecklade funktioner för att arbeta med tabeller i Access.
Skapa bord
Denna kod kommer att använda SQL för att skapa en tabell med namnet "Table1" med fält "ID" och "Namn":
Dim tabellnamn som sträng Dim fält som sträng tabellnamn = "Tabell1" fält = "([ID] varchar (150), [Namn] varchar (150))" CurrentDb.Execute "SKAPA TABELL" & tabellnamn och fält
Stäng tabell
Denna rad med VBA -kod stänger en tabell (sparar ändringar):
DoCmd.Close acTable, "Table1", acSaveYes
Så här stänger du ett bord utan att spara:
DoCmd.Close acTable, "Table1", acSaveNo
Ta bort tabell
Denna kod raderar en tabell (notera: först borde tabellen stängas):
DoCmd.Close acTable, "Table1", acSaveYes DoCmd.DeleteObject acTable = acDefault, "Table1"
Byt namn på tabell:
Denna kodrad byter namn på en åtkomsttabell:
DoCmd.Rename "Table1", acTable, "Table1_New"
Ett annat alternativ är att använda egenskapen TableDefs för ett databasobjekt.
Ange tdf = db.TableDefs (strOldTableName) tdf.Name = strNewTableName
Tomt / klart bord
Denna VBA -kod kommer att tömma en tabell:
DoCmd.RunSQL "DELETE * FROM" & "Table1"
Avkorta tabell / radera poster
Denna rad med VBA -kod använder SQL för att ta bort poster från en tabell som uppfyller vissa kriterier:
DoCmd.RunSQL ("DELETE * FROM" & "Table1" & "WHERE" & "num = 2")
Exportera tabell till Excel
Om du vill exportera en tabell till Excel använder du DoCmd.OutputTo metod:
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"
eller använd DoCmd.TransferSpreadsheet metod:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Table1", "c: \ temp \ ExportedTable.xls", True
Uppdatera tabell
Följande kod uppdaterar en post utan att visa varningsmeddelandet:
DoCmd.SetWarnings (False) DoCmd.RunSQL "Uppdatera ProductsT SET ProductsT.ProductName = 'Product AAA' WHERE (((ProductsT.ProductID) = 1))"
Öppna VBA -tabellfunktioner
Ovanstående kodexempel är de enkla kommandon du kan använda för att interagera med tabeller med VBA. Men du kommer ofta att behöva lägga till mycket mer stödjande kod (inklusive felhantering) för att korrekt använda dessa kommandon. Nedan hittar du professionellt utveckla funktioner för att arbeta med Tabeller i Access.
Räkna tabellposter
Denna funktion räknar antalet poster i en tabell:
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) Sedan c = 0 Annat c = Nz (r! RCount, 0) End If Count_Table_Records = c Avsluta funktion Err: Ring MsgBox ("Ett fel uppstod:" & Err.Description, vbExclamation, "Error") End Function ' Användningsexempel Privat under Count_Table_Records_Example () MsgBox (Count_Table_Records ("Table1")) End Sub
Kontrollera om tabellen existerar
Denna funktion testar om det finns en tabell som returnerar SANT eller FALSKT:
Public Function TableExists (ByVal strTableName As String) As Boolean 'Funktion: Bestäm om tabellen finns i en Access -databas' Argument: strTablename: Namn på tabell för att kontrollera Dim tdf As DAO.TableDef On Error Resume Next Set tdf = CurrentDb.TableDefs (strTableName ) TableExists = (Err.Number = 0) Slutfunktion
Här är ett exempel på funktionen som används:
Private Sub TableExists_Example () If VBA_Access_Checks.TableExists ("Table") = True Då MsgBox ("Tabellen hittades!") Annat MsgBox ("Tabellen hittades INTE!") Sluta om End Sub
Skapa tabellfunktion
Denna funktion skapar en tabell i Access VBA i den aktuella databasen:
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 Sedan CreateTable = True Else CreateTable = False End Om Exit Function Err: CreateTable = False MsgBox Err.Number & "" & Err.Description End Function
Denna funktion returnerar SANT om tabellen skapas framgångsrikt eller FALSK om tabellen inte skapas.
Du kan kalla funktionen så här:
Privat del CreateTable_Example () Call CreateTable ("f1, f2, f3, f4", "ttest") Avsluta sub
Radera / släpp tabellfunktion
Denna funktion kommer att ta bort en tabell om den finns:
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 & "delete …" DoCmd.SetWarnings True End If End Function
Du kan kalla funktionen så här:
Private Sub DeleteTableIfExists_Example () Call DeleteTableIfExists ("Table1") End Sub
Tom tabellfunktion
Denna funktion kommer att tömma en tabell om den finns:
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 & "tömd …" DoCmd.SetWarnings True End If End -funktion
Du kan kalla funktionen så här:
Private Sub EmptyTable_Example () Call EmptyTable ("Table1") End Sub
Byt namn på tabellfunktion
Denna VBA -funktion kommer att byta namn på en tabell:
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. Vid fel Återuppta nästa "Om databasnamnet är tomt … Om Trim $ (strDBPath) =" "Då" … ställ sedan in Db till nuvarande Db. Ange db = CurrentDb () Annat 'Annars ställer du in Db till den angivna öppna databasen. Ange db = DBEngine.Workspaces (0) .OpenDatabase (strDBPath) 'Se om ett fel uppstod. If Err Då kunde 'MsgBox "inte hitta databasen för att öppna:" & 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 'Exempel Privat Sub RenameTable_Example () Call RenameTable ("table1", "table2") End Sub
Du kan kalla funktionen så här:
Private Sub RenameTable_Example () Call RenameTable ("table1", "table2") End Sub
Trunkera / radera poster från tabellen
Denna funktion tar bort poster från en tabell med felhantering:
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 SubEr: Exit Function SubEr: Delete_From_Table error: "& vbCrLf & Err.Number &": "& Err.Description Resume SubExit End Function 'Usage Exempel Public Sub Delete_From_Table_Example () Call Delete_From_Table (" Table1 "," num = 2 ") End Sub
Exportera tabell till Excel
Denna kodrad exporterar en tabell till Excel (ett nytt kalkylblad):
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"
Eller så kan du använda den här funktionen:
Public Function Export_Table_Excel (TableName As String, FilePath As String) DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, True End Function 'Exempel Exempel_Table_Excel_Example () Export_Table_Excel ("Table1", "Tab" Avsluta Sub
Ovanstående kod exporteras till ett nytt kalkylblad. Istället kan du lägga till en tabell i ett befintligt kalkylblad. Vår artikel om import / export i Access VBA behandlar detta mer detaljerat.
Lägg till / lägg till poster i en tabell
Denna funktion lägger till / lägger till en post i en tabell:
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 Exempel Private Sub Append_Record_To_Table_ () Ring Append_Record_To_Table ("Tabell1", "num", 3) Avsluta Sub
Lägg till post i tabell från formulär
Denna funktion lägger till en post i en tabell från ett formulär:
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