Denne opplæringen lærer deg hvordan du arbeider med tilgangstabeller ved hjelp av VBA.
Få tilgang til VBA -tabeller
For å starte vil vi demonstrere de enkle kommandoene for å jobbe med Tabeller i Access. Senere i denne opplæringen vil vi vise deg fulle profesjonelt utviklede funksjoner for arbeid med tabeller i Access.
Lag tabell
Denne koden bruker SQL til å lage en tabell med navnet "Table1" med feltene "ID" og "Name":
Dim tabellnavn som streng Dim felter som streng tabellnavn = "Tabell1" felt = "([ID] varchar (150), [navn] varchar (150))" CurrentDb.Execute "CREATE TABLE" og tabellnavn og felt
Lukk tabellen
Denne linjen med VBA -kode vil lukke en tabell (lagrer endringer):
DoCmd.Close acTable, "Table1", acSaveYes
Slik lukker du et bord uten å lagre:
DoCmd.Close acTable, "Table1", acSaveNo
Slett tabell
Denne koden sletter en tabell (merk: først bør tabellen lukkes):
DoCmd.Close acTable, "Table1", acSaveYes DoCmd.DeleteObject acTable = acDefault, "Table1"
Gi nytt navn til tabell:
Denne kodelinjen vil gi nytt navn til en tilgangstabell:
DoCmd.Rename "Table1", acTable, "Table1_New"
Et annet alternativ er å bruke TableDefs -egenskapen til et databaseobjekt.
Angi tdf = db.TableDefs (strOldTableName) tdf.Name = strNewTableName
Tom / klar tabell
Denne VBA -koden vil tømme en tabell:
DoCmd.RunSQL "SLETT * FRA" og "Tabell1"
Avkort tabell / slett poster
Denne linjen med VBA -kode bruker SQL til å slette poster fra en tabell som oppfyller visse kriterier:
DoCmd.RunSQL ("DELETE * FROM" & "Table1" & "WHERE" & "num = 2")
Eksporter tabell til Excel
For å eksportere en tabell til Excel, bruk DoCmd.OutputTo metode:
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"
eller bruk DoCmd.TransferSpreadsheet metode:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Table1", "c: \ temp \ ExportedTable.xls", True
Oppdater tabell
Følgende kode vil oppdatere en post, uten å vise advarselen:
DoCmd.SetWarnings (False) DoCmd.RunSQL "Oppdater ProductsT SET ProductsT.ProductName = 'Product AAA' WHERE (((ProductsT.ProductID) = 1))"
Få tilgang til VBA -tabellfunksjoner
Kodeeksemplene ovenfor er de enkle kommandoene du kan bruke til å samhandle med tabeller ved hjelp av VBA. Imidlertid må du ofte legge til mye mer støttekode (inkludert feilhåndtering) for å kunne bruke disse kommandoene. Nedenfor finner du profesjonelt utviklede funksjoner for arbeid med Tabeller i Access.
Count Table Records
Denne funksjonen vil telle antall poster i en tabell:
Offentlig funksjon Count_Table_Records (tabellenavn som streng) som heltall på feil 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) Deretter c = 0 Ellers c = Nz (r! RCount, 0) End If Count_Table_Records = c Avslutt funksjon Err: Ring MsgBox ("En feil oppstod:" & Err.Description, vbExclamation, "Error") End Function ' Eksempel på bruk Private Sub Count_Table_Records_Example () MsgBox (Count_Table_Records ("Table1")) End Sub
Sjekk om tabellen eksisterer
Denne funksjonen vil teste om det finnes en tabell som returnerer SANN eller FALSK:
Public Function TableExists (ByVal strTableName As String) As Boolean 'Function: Bestem if tabellen finnes i en Access -database' Argumenter: strTablename: Navn på tabellen for å kontrollere Dim tdf As DAO.TableDef On Error Resume Next Set tdf = CurrentDb.TableDefs (strTableName ) TableExists = (Err.Number = 0) Sluttfunksjon
Her er et eksempel på funksjonen som er i bruk:
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
Lag tabellfunksjon
Denne funksjonen vil opprette en tabell i Access VBA i den nåværende databasen:
Offentlig funksjon CreateTable (tabellfelt som streng, tabellnavn som streng) Som boolsk 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 Deretter CreateTable = True Else CreateTable = False End If Exit Function Err: CreateTable = False MsgBox Err.Number & "" & Err.Description End Function
Denne funksjonen vil returnere TRUE hvis tabellen er opprettet eller FALSE hvis tabellen ikke er opprettet.
Du kan kalle funksjonen slik:
Private Sub CreateTable_Example () Call CreateTable ("f1, f2, f3, f4", "ttest") Slutt Sub
Slett / slipp tabellfunksjon
Denne funksjonen vil slette en tabell hvis den eksisterer:
Offentlig funksjon DeleteTableIfExists (tabellenavn som streng) 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 -funksjon
Du kan kalle funksjonen slik:
Private Sub DeleteTableIfExists_Example () Call DeleteTableIfExists ("Tabell1") Slutt Sub
Tom tabellfunksjon
Denne funksjonen vil tømme en tabell hvis den eksisterer:
Offentlig funksjon EmptyTable (tabellnavn som streng) If Not IsNull (DLookup ("Name", "MSysObjects", "Name = '" & TableName & "'")) Then DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM" & TableName Debug.Print "Table" og TableName & "tømt …" DoCmd.SetWarnings True End If End -funksjon
Du kan kalle funksjonen slik:
Private Sub EmptyTable_Example () Call EmptyTable ("Table1") End Sub
Gi nytt navn til tabellfunksjonen
Denne VBA -funksjonen vil gi nytt navn til en tabell:
Offentlig funksjon 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 feil. Ved feil Fortsett neste 'Hvis databasenavnet er tomt … Hvis Trim $ (strDBPath) = "" Da' … sett deretter Db til gjeldende Db. Sett db = CurrentDb () Ellers 'Ellers sett Db til den angitte åpne databasen. Sett db = DBEngine.Workspaces (0) .OpenDatabase (strDBPath) 'Se om det oppstod en feil. If Err Then 'MsgBox "Kunne ikke finne databasen for å åpne:" & 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 Private Private RenameTable_Example () Call RenameTable ("table1", "table2") End Sub
Du kan kalle funksjonen slik:
Private Sub RenameTable_Example () Call RenameTable ("table1", "table2") End Sub
Avkort / slett poster fra tabellen
Denne funksjonen vil slette poster fra en tabell med feilhåndtering:
Offentlig funksjon Delete_From_Table (tabellenavn som streng, kriterier som streng) på feil GoTo SubError DoCmd.SetWarnings False DoCmd.RunSQL ("DELETE * FROM" & TableName & "WHERE" & Criteria) DoCmd.SetWarnings True SubExit: Exit Function SubEr: Delete_From_Table error: "& vbCrLf & Err.Number &": "& Err.Description Resume SubExit End Funksjon 'Bruk Eksempel Public Sub Delete_From_Table_Example () Call Delete_From_Table (" Table1 "," num = 2 ") End Sub
Eksporter tabell til Excel
Denne kodelinjen eksporterer en tabell til Excel (et nytt regneark):
DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"
Eller du kan bruke denne funksjonen:
Offentlig funksjon Export_Table_Excel (TableName As String, FilePath As String) DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, True End Function 'Example_Table_Excel_Example () Export_Table_Excel ("Table1", "Tab" Slutt Sub
Koden ovenfor eksporteres til et nytt regneark. I stedet kan du legge til en tabell i et eksisterende regneark. Artikkelen vår om import / eksport i Access VBA dekker dette mer detaljert.
Legg til / legg til poster i en tabell
Denne funksjonen vil legge til / legge til en post i en tabell:
Offentlig funksjon 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 Private Private Append_Record_To_Table_ () Ring Append_Record_To_Table ("Table1", "num", 3) End Sub
Legg post i tabellen fra skjema
Denne funksjonen vil legge til en post i en tabell fra et skjema:
Offentlig funksjon Add_Record_To_Table_From_Form (tabellnavn som streng) på feil GoTo SubError Dim rs som 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