Denne vejledning lærer dig, hvordan du arbejder med Access Tables ved hjælp af VBA.
Få adgang til VBA -tabeller
For at starte vil vi demonstrere de enkle kommandoer til at arbejde med Tabeller i Access. Senere i denne vejledning viser vi dig fuldt ud professionelt udviklede funktioner til arbejde med tabeller i Access.
Opret tabel
Denne kode vil bruge SQL til at oprette en tabel med navnet "Table1" med felterne "ID" og "Name":
Dim tabelnavn som streng Dim felter som streng tabelnavn = "tabel1" felter = "([ID] varchar (150), [navn] varchar (150))" CurrentDb.Execute "CREATE TABLE" & tabelnavn og felter
Luk bord
Denne linje med VBA -kode lukker en tabel (gemmer ændringer):
DoCmd.Close acTable, "Table1", acSaveYes
Sådan lukker du et bord uden at gemme:
DoCmd.Close acTable, "Table1", acSaveNo
Slet tabel
Denne kode vil slette en tabel (Bemærk: først skal tabellen lukkes):
DoCmd.Close acTable, "Table1", acSaveYes DoCmd.DeleteObject acTable = acDefault, "Table1"
Omdøb tabel:
Denne kodelinje omdøber en adgangstabel:
DoCmd.Rename "Table1", acTable, "Table1_New"
En anden mulighed er at bruge egenskaben TableDefs for et databaseobjekt.
Indstil tdf = db.TableDefs (strOldTableName) tdf.Name = strNewTableName
Tom / klar tabel
Denne VBA -kode vil tømme en tabel:
DoCmd.RunSQL "DELETE * FROM" & "Table1"
Afkort tabellen / slet poster
Denne linje med VBA -kode bruger SQL til at slette poster fra en tabel, der opfylder visse kriterier:
DoCmd.RunSQL ("DELETE * FROM" & "Table1" & "WHERE" & "num = 2")
Eksporter tabel til Excel
For at eksportere en tabel til Excel skal du bruge DoCmd.OutputTo metode:
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"
eller brug DoCmd.TransferSpreadsheet metode:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Table1", "c: \ temp \ ExportedTable.xls", True
Opdater tabel
Følgende kode opdaterer en registrering uden at vise advarslen:
DoCmd.SetWarnings (Falsk) DoCmd.RunSQL "Opdater ProdukterT SET ProdukterT.ProductName = 'Produkt AAA' HVOR (((ProdukterT.ProductID) = 1))"
Få adgang til VBA -bordfunktioner
Ovenstående kodeeksempler er de enkle kommandoer, du kan bruge til at interagere med tabeller ved hjælp af VBA. Dog skal du ofte tilføje meget mere understøttende kode (inklusive fejlhåndtering) for at kunne bruge disse kommandoer korrekt. Nedenfor finder du professionelt udviklede funktioner til arbejde med Tabeller i Access.
Tælle tabeloptegnelser
Denne funktion tæller antallet af poster i en 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) Derefter c = 0 Else c = Nz (r! RCount, 0) End If Count_Table_Records = c Exit Function Err: Call MsgBox ("En error occurred:" & Err.Description, vbExclamation, "Error") End Function ' Brugseksempel Privat under Count_Table_Records_Example () MsgBox (Count_Table_Records ("Table1")) End Sub
Kontroller, om tabellen findes funktion
Denne funktion tester, om der findes en tabel, der returnerer SAND eller FALSK:
Public Function TableExists (ByVal strTableName As String) As Boolean 'Funktion: Bestem om der findes en tabel i en Access -database' Argumenter: strTablename: Tabellenavn for at kontrollere Dim tdf As DAO.TableDef On Error Resume Next Set tdf = CurrentDb.TableDefs (strTableName ) TableExists = (Err.Number = 0) Slutfunktion
Her er et eksempel på funktionen i brug:
Private Sub TableExists_Example () If VBA_Access_Checks.TableExists ("Table") = True Then MsgBox ("Table was found!") Else MsgBox ("Table were NOT found!") End If End Sub
Opret tabelfunktion
Denne funktion opretter en tabel i Access VBA i den aktuelle database:
Offentlig funktion CreateTable (tabelfelter som streng, tabelnavn som streng) Som boolsk dim strCreateTable som streng Dim intCount som heltal Dim strFields () Som streng Dim strValues () Som streng Dim strInsertSQL som streng Dim intCounter som heltal Dim intData som heltal på fejl Gå til fejl 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 Derefter CreateTable = True Else CreateTable = False End If Exit Function Err: CreateTable = False MsgBox Err.Number & "" & Err.Description End Function
Denne funktion returnerer SAND, hvis tabellen er oprettet med succes eller FALSK, hvis tabellen ikke er oprettet.
Du kan kalde funktionen sådan:
Privat sub CreateTable_Example () Opkald CreateTable ("f1, f2, f3, f4", "ttest") Afslut Sub
Slet / slip tabelfunktion
Denne funktion sletter en tabel, hvis den findes:
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 -funktion
Du kan kalde funktionen sådan:
Private Sub DeleteTableIfExists_Example () Call DeleteTableIfExists ("Tabel1") Afslut Sub
Tom tabelfunktion
Denne funktion vil tømme en tabel, hvis den findes:
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ømt …" DoCmd.SetWarnings True End If End -funktion
Du kan kalde funktionen sådan:
Private Sub EmptyTable_Example () Call EmptyTable ("Tabel1") Afslut Sub
Omdøb tabelfunktion
Denne VBA -funktion omdøber en tabel:
Public Function RenameTable (ByVal strOldTableName As String, ByVal strNewTableName As String, Valgfri strDBPath As String) As Boolean Dim db As DAO.Database Dim tdf As TableDef 'Trap for eventuelle fejl. Ved fejl Genoptag næste 'Hvis databasens navn er tomt … Hvis Trim $ (strDBPath) = "" Så' … indstil derefter Db til den aktuelle Db. Indstil db = CurrentDb () Ellers 'Ellers skal du indstille Db til den angivne åbne database. Indstil db = DBEngine.Workspaces (0) .OpenDatabase (strDBPath) 'Se om der opstod en fejl. Hvis Err derefter 'MsgBox "Kunne ikke finde databasen til at åbne:" & 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
Du kan kalde funktionen sådan:
Private Sub RenameTable_Example () Call RenameTable ("tabel1", "tabel2") Afslut Sub
Trunker / slet poster fra tabel
Denne funktion sletter poster fra en tabel med fejlhåndtering:
Offentlig funktion Delete_From_Table (tabelnavn som streng, kriterier som streng) ved fejl 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 fejl: "& vbCrLf & Err.Number &": "& Err.Description Genoptag SubExit End Funktion 'Brug Eksempel Public Sub Delete_From_Table_Example () Call Delete_From_Table (" Table1 "," num = 2 ") End Sub
Eksporter tabel til Excel
Denne kodelinje eksporterer en tabel til Excel (et nyt regneark):
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"
Eller du kan bruge denne funktion:
Offentlig funktion Export_Table_Excel (TableName As String, FilePath As String) DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, True End Function 'Exempel Eks ._Table_Excel_Example () Export_Table_Excel ("Tabel1", "Tabel1", "Tabel1", "Tabel1", "Eksport_tabel") Afslut Sub
Ovenstående kode eksporteres til et nyt regneark. I stedet kan du tilføje en tabel til et eksisterende regneark. Vores artikel om import / eksport i Access VBA dækker dette mere detaljeret.
Tilføj / tilføj poster til en tabel
Denne funktion tilføjer / tilføjer en post til en tabel:
Offentlig funktion 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 = Intet SubExit: Exit Function SubError: MsgBox "RunSQL error:" & vbCrLf & Err.Number & ":" & Err.Beskrivelse Genoptag SubExit Slut funktion 'Anvendelseseksempel Privat Sub Append_Record_To_Table_ () Ring til Append_Record_To_Table ("Tabel1", "num", 3) Afslut sub
Føj post til tabel fra formular
Denne funktion tilføjer en post til en tabel fra en formular:
Offentlig funktion 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