Pasiekite VBA lenteles - atnaujinkite, skaičiuokite, ištrinkite, sukurkite, pervardykite, eksportuokite

Ši pamoka išmokys jus dirbti su prieigos lentelėmis naudojant VBA.

Pasiekite VBA lenteles

Norėdami pradėti, parodysime paprastas komandas, skirtas dirbti su „Access“ lentelėmis. Vėliau šioje pamokoje parodysime visas profesionaliai sukurtas funkcijas, skirtas dirbti su „Access“ lentelėmis.

Sukurti lentelę

Šis kodas naudos SQL, kad sukurtų lentelę pavadinimu „Table1“ su laukais „ID“ ir „Name“:

 Dim lentelės_pavadinimas kaip eilutė Dim laukai Kaip eilutė

Uždaryti lentelę

Ši VBA kodo eilutė uždarys lentelę (išsaugomi pakeitimai):

DoCmd.Close acTable, "Table1", acSaveYes

Norėdami uždaryti lentelę neišsaugodami:

DoCmd.Close acTable, "Table1", acSaveNo

Ištrinti lentelę

Šis kodas ištrins lentelę (pastaba: pirmiausia lentelė turi būti uždaryta):

DoCmd.Close acTable, "Table1", acSaveYes DoCmd.DeleteObject acTable = acDefault, "Table1"

Pervardyti lentelę:

Ši kodo eilutė pervadins prieigos lentelę:

DoCmd.Pervardykite „Table1“, acTable, „Table1_New“

Kita galimybė yra naudoti duomenų bazės objekto ypatybę „TableDefs“.

Nustatykite tdf = db.TableDefs (strOldTableName) tdf.Name = strNewTableName

Tuščias / aiškus stalas

Šis VBA kodas ištuštins lentelę:

„DoCmd.RunSQL“ „DELETE * FROM“ ir „Table1“

Sutrumpinkite lentelę / ištrinkite įrašus

Ši VBA kodo eilutė naudoja SQL, kad ištrintų įrašus iš lentelės, atitinkančios tam tikrus kriterijus:

DoCmd.RunSQL ("DELETE * FROM" & "Table1" & "WHERE" & "num = 2")

Eksportuoti lentelę į „Excel“

Norėdami eksportuoti lentelę į „Excel“, naudokite DoCmd.OutputTo metodas:

DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"

arba naudoti DoCmd.TransferSheetsheet metodas:

DoCmd.TransferSpreadsheetheet acExport, acSpreadsheetTypeExcel9, "Table1", "c: \ temp \ ExportedTable.xls", tiesa

Atnaujinti lentelę

Šis kodas atnaujins įrašą nerodydamas įspėjamojo pranešimo:

DoCmd.SetWarnings (klaidinga) DoCmd.RunSQL "Update ProductsT SET ProductsT.ProductName = 'Product AAA' WHERE ((((ProductsT.ProductID) = 1))"

Pasiekite VBA lentelių funkcijas

Aukščiau pateikti kodo pavyzdžiai yra paprastos komandos, kurias galite naudoti norėdami sąveikauti su lentelėmis naudodami VBA. Tačiau norint tinkamai panaudoti šias komandas, dažnai turėsite pridėti daug daugiau palaikančio kodo (įskaitant klaidų tvarkymą). Žemiau rasite profesionaliai sukurtas funkcijas, skirtas dirbti su „Access“ lentelėmis.

Skaičiuoti lentelės įrašus

Ši funkcija suskaitys įrašų skaičių lentelėje:

Viešosios funkcijos Count_Table_Records (Lentelės pavadinimas kaip eilutė) kaip sveikasis skaičius Klaida GoTo Err: Dim r Kaip DAO.Recordset Dim c As Integer Set r = CurrentDb.OpenRecordset ("Pasirinkite skaičių (*) kaip rcount iš" & TableName) .OpenRecordset If (r Tada. Naudojimo pavyzdys Privatus antrinis skaičius Count_Table_Records_Example () „MsgBox“ (Count_Table_Records („1 lentelė“)) Pabaiga

Patikrinkite, ar lentelė veikia

Ši funkcija patikrins, ar yra lentelė, grąžinanti TRUE arba FALSE:

Viešųjų funkcijų lentelė Egzistuoja (ByVal strTableName kaip eilutė) kaip loginė „Funkcija: Nustatykite, ar lentelė egzistuoja„ Access “duomenų bazėje“ Argumentai: strTablename: Lentelės pavadinimas, kurį reikia patikrinti Dim tdf Kaip DAO.TableDef On Error Resume Next Set tdf = CurrentDb.TableDefs (strTableName ) TableExists = (Err.Number = 0) Pabaigos funkcija

Čia yra naudojamos funkcijos pavyzdys:

Private Sub TableExists_Example () If VBA_Access_Checks.TableExists ("Table") = tiesa Tada MsgBox ("Lentelė buvo rasta!") Kita "MsgBox" ("Lentelė nerasta!") Pabaiga Jei pabaiga

Sukurti lentelės funkciją

Ši funkcija sukurs lentelę prieigos VBA dabartinėje duomenų bazėje:

Viešoji funkcija CreateTable (table_fields kaip eilutė, table_name kaip String) Kaip Boolean Dim strCreateTable Kaip String Dim intCount As Integer Dim strFields () Kaip String Dim strValues ​​() Kaip String Dim strInsertSQL Kaip String Dim intCounter As Integer Dim intData As Integer On Error GoTo Erg strFields = Split (table_fields, ",") strCreateTable = "CREATE TABLE" & table_name & "(" For intCounter = 0 To UBound (strFields) - 1 strCreateTable = strCreateTable & "[" & strFields (intCounter) & "] varchar ( 150), "Kitas, jei teisus (strCreateTable, 1) =", "Tada strCreateTable = Left (strCreateTable, Len (strCreateTable) - 1) strCreateTable = strCreateTable &") "End If CurrentDb.Execute strCreateTable intCounter = 0 intData = 0 Err.Number = 0 Tada CreateTable = True Else CreateTable = Netinkama pabaiga, jei išėjimo funkcija Klaida: CreateTable = False MsgBox Err.Number & "" & Err.Description Function

Ši funkcija grąžins TRUE, jei lentelė bus sukurta sėkmingai, arba FALSE, jei lentelė nebus sukurta.

Funkciją galite iškviesti taip:

Privatus antrinis „CreateTable_Example“) Skambinti „CreateTable“ („f1, f2, f3, f4“, „ttest“) Pabaiga

Ištrinti / numesti lentelės funkciją

Ši funkcija ištrins lentelę, jei ji yra:

Viešoji funkcija DeleteTableIfExists (lentelės pavadinimas kaip eilutė) Jei ne IsNull (DLookup ("Pavadinimas", "MSysObjects", "Name = '" & TableName & "'"))) Tada DoCmd.SetWarnings False DoCmd.Close acTable, TableName, acSaveYes DoCmd. DeleteObject acTable = acDefault, TableName Debug.Print "Table" & TableName & "ištrinta …" DoCmd.SetWarnings Tikroji pabaiga, jei pabaigos funkcija

Funkciją galite iškviesti taip:

Privatus antraštė DeleteTableIfExists_Example () Skambinti DeleteTableIfExists („1 lentelė“) Pabaiga

Tuščios lentelės funkcija

Ši funkcija ištuštins lentelę, jei ji egzistuoja:

Viešoji funkcija EmptyTable (Lentelės pavadinimas kaip eilutė) Jei ne IsNull (DLookup ("Pavadinimas", "MSysObjects", "Name = '" & TableName & "'"))) Tada DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM" & TableName Derinti. Spausdinti „Lentelė“ ir „Lentelės pavadinimas“ ir „ištuštinti…“ „DoCmd.SetWarnings“ Tikroji pabaiga, jei pabaigos funkcija

Funkciją galite iškviesti taip:

Privatus antrinis EmptyTable_Example () Skambinti EmptyTable („1 lentelė“) Pabaiga

Pervardyti lentelės funkciją

Ši VBA funkcija pervardys lentelę:

Viešoji funkcija RenameTable (ByVal strOldTableName kaip eilutė, ByVal strNewTableName kaip eilutė, pasirinktinai strDBPath kaip eilutė) kaip loginis Dim db kaip DAO.Database Dim tdf As TableDef 'Trap už klaidas. On Error Resume Next 'Jei duomenų bazės pavadinimas tuščias … Jei Trim $ (strDBPath) = "" Tada "… tada nustatykite Db į dabartinį Db. Nustatykite db = CurrentDb () Kitaip 'Priešingu atveju nustatykite Db į nurodytą atvirą duomenų bazę. Nustatykite db = DBEngine.Workspaces (0). OpenDatabase (strDBPath) 'Patikrinkite, ar įvyko klaida. Jei klaida „MsgBox“ nepavyko rasti duomenų bazės, kurią būtų galima atidaryti: strNewTableName db.Close RenameTable = Tikras kitas RenameTable = False End if End Function 'Naudojimo pavyzdys Private Sub RenameTable_Example () Call RenameTable ("table1", "table2") End Sub

Funkciją galite iškviesti taip:

Privatus antrinis RenameTable_Example () Skambutis RenameTable ("table1", "table2") Pabaiga

Sutrumpinti / ištrinti įrašus iš lentelės

Ši funkcija ištrins įrašus iš lentelės su klaidų tvarkymu:

Viešoji funkcija Delete_From_Table (Lentelės pavadinimas kaip eilutė, kriterijai kaip eilutė) Klaida GoTo SubError DoCmd.SetWarnings False DoCmd.RunSQL ("DELETE * FROM" & TableName & "WHERE" & Kriterijai) DoCmd.SetWarnings True SubExit: Exit Exit Delete_From_Table klaida: "& vbCrLf & Err.Number &": "& Err.Description Resume SubExit End Function" Naudojimo pavyzdys Public Sub Delete Delete_From_Table_Example () Call Delete_From_Table ("Table1", "num = 2") End Sub

Eksportuoti lentelę į „Excel“

Ši kodo eilutė eksportuos lentelę į „Excel“ (naują skaičiuoklę):

DoCmd.OutputTo acOutputTable, "Table1", acFormatXLS, "c: \ temp \ ExportedTable.xls"

Arba galite naudoti šią funkciją:

Viešoji funkcija Export_Table_Excel (TableName As String, FilePath As String) DoCmd.TransferSheetsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, True End Function 'Usage Example Sub Sub Export_Table_Excel_Example () Export_Table_Excel ("Export_Table_Excel") Pabaiga Sub

Aukščiau pateiktas kodas bus eksportuotas į naują skaičiuoklę. Vietoj to galite pridėti lentelę prie esamos skaičiuoklės. Mūsų straipsnyje apie „Access VBA“ importavimą / eksportavimą tai išsamiau aprašyta.

Pridėti / pridėti įrašus prie lentelės

Ši funkcija pridės / pridės įrašą prie lentelės:

Viešoji funkcija „Append_Record_To_Table“ („TableName“ kaip eilutė, „FieldName“ kaip eilutė, „FieldVame“ kaip eilutė) Klaida „GoTo SubError Dim rs“ kaip DAO.Recordset Dim SQL As String Dim CurrentYear As Integer Set rs = CurrentDb.OpenRecordset (TableName) .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 'Naudojimo pavyzdys Private Sub AppTx_Pecord () Skambinti „Append_Record_To_Table“ („1 lentelė“, „num“, 3) Pabaiga

Įtraukite įrašą į lentelę iš formos

Ši funkcija pridės įrašą prie lentelės iš formos:

Viešoji funkcija 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] = Value Field3] = Value3 rs. Atnaujinti rs.Close Set rs = Nothing SubExit: Exit Function SubError: MsgBox "Refresh_Form error:" & vbCrLf & Err.Number & ":" & Err.Description End Function

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave