Uzyskaj dostęp do tabel VBA - aktualizuj, zliczaj, usuwaj, twórz, zmieniaj nazwę, eksportuj

Ten samouczek nauczy Cię, jak pracować z tabelami dostępu za pomocą VBA.

Uzyskaj dostęp do tabel VBA

Na początek zademonstrujemy proste polecenia do pracy z tabelami w programie Access. W dalszej części tego samouczka pokażemy pełne profesjonalnie opracowane funkcje do pracy z tabelami w programie Access.

Utwórz tabelę

Ten kod użyje SQL do utworzenia tabeli o nazwie „Tabela1” z polami „ID” i „Nazwa”:

 Dim nazwa_tabeli As String Dim pola As String nazwa_tabeli = "Table1" fields = "([ID] varchar(150), [Name] varchar(150))" CurrentDb.Execute "CREATE TABLE" & nazwa_tabeli i pola

Zamknij tabelę

Ta linia kodu VBA zamknie tabelę (zapisz zmiany):

DoCmd.Zamknij acTable, "Tabela1", acSaveYes

Aby zamknąć tabelę bez zapisywania:

DoCmd.Zamknij acTable, "Tabela1", acSaveNo

Usuń tabelę

Ten kod usunie Stół (uwaga: najpierw Stół powinien zostać zamknięty):

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

Zmień nazwę tabeli:

Ten wiersz kodu zmieni nazwę tabeli dostępu:

DoCmd.Rename „Table1”, acTable, „Table1_New”

Inną opcją jest użycie właściwości TableDefs obiektu bazy danych.

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

Pusta/wyczyść tabelę

Ten kod VBA opróżni tabelę:

DoCmd.RunSQL "USUŃ * Z " & "Tabela1"

Obetnij tabelę / Usuń rekordy

Ten wiersz kodu VBA używa języka SQL do usuwania rekordów z tabeli, które spełniają określone kryteria:

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

Eksportuj tabelę do Excela

Aby wyeksportować tabelę do programu Excel, użyj DoCmd.OutputTo metoda:

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

lub użyj DoCmd.TransferArkusz kalkulacyjny metoda:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Table1", "c:\temp\ExportedTable.xls", prawda

Aktualizuj tabelę

Poniższy kod zaktualizuje rekord bez wyświetlania komunikatu ostrzegawczego:

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

Dostęp do funkcji tabeli VBA

Powyższe przykłady kodu to proste polecenia, których można użyć do interakcji z tabelami przy użyciu języka VBA. Jednak często będziesz musiał dodać znacznie więcej kodu pomocniczego (w tym obsługę błędów), aby prawidłowo korzystać z tych poleceń. Poniżej znajdziesz profesjonalnie opracowane funkcje do pracy z tabelami w programie Access.

Policz rekordy tabeli

Ta funkcja zliczy liczbę rekordów w tabeli:

Funkcja publiczna 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("Wybierz count(*) jako rcount z " & 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("Wystąpił błąd:" & Err.Description, vbExclamation, "Error") End Function ' Przykład użycia Private Sub Count_Table_Records_Example() MsgBox (Count_Table_Records("Table1")) End Sub

Sprawdź, czy tabela istnieje funkcja

Ta funkcja sprawdzi, czy tabela istnieje, zwracając TRUE lub FALSE:

Funkcja publiczna TableExists(ByVal strTableName As String) As Boolean 'Funkcja: Określ, czy tabela istnieje w bazie danych programu Access 'Arguments:strTablename: Nazwa tabeli do sprawdzenia Dim tdf As DAO.TableDef Po błędzie Wznów następne Ustaw tdf = CurrentDb.TableDefs(strTableName ) TableExists = (Err.Number = 0) Koniec funkcji

Oto przykład używanej funkcji:

Private Sub TableExists_Example() If VBA_Access_Checks.TableExists("Table") = True Then MsgBox ("Tabela została znaleziona!") Else MsgBox ("Tabela NIE została znaleziona!") End If End Sub

Utwórz funkcję tabeli

Ta funkcja utworzy tabelę w programie Access VBA w bieżącej bazie danych:

Funkcja publiczna 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 W przypadku błędu GoTo Err strFields = Split(table_fields, ",") strCreateTable = "CREATE TABLE" & nazwa_tabeli & "(" 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 Funkcja zakończenia

Ta funkcja zwróci TRUE, jeśli tabela zostanie pomyślnie utworzona lub FALSE, jeśli tabela nie zostanie utworzona.

Możesz wywołać funkcję w ten sposób:

Private Sub CreateTable_Example() Wywołaj CreateTable("f1,f2,f3,f4", "ttest") End Sub

Funkcja usuwania / upuszczania tabeli

Ta funkcja usunie tabelę, jeśli istnieje:

Funkcja publiczna DeleteTableIfExists(TableName As String) If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'")) Następnie DoCmd.SetWarnings False DoCmd.Close acTable, TableName, acSaveYes DoCmd. DeleteObject acTable = acDefault, TableName Debug.Print "Table " & TableName & " usunięty… " DoCmd.SetWarnings True End If End Function

Możesz wywołać funkcję w ten sposób:

Private Sub DeleteTableIfExists_Example() Wywołaj DeleteTableIfExists("Table1") End Sub

Funkcja pustego stołu

Ta funkcja opróżni tabelę, jeśli istnieje:

Funkcja publiczna EmptyTable(TableName As String) If Not IsNull(DLookup("Name", "MSysObjects", "Name='" & TableName & "'")) Then DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM " & TableName Debug.Print "Tabela " & NazwaTabeli & " opróżniono… " DoCmd.SetWarnings True End If End Function

Możesz wywołać funkcję w ten sposób:

Private Sub EmptyTable_Example() Wywołaj EmptyTable("Table1") End Sub

Zmień nazwę funkcji tabeli

Ta funkcja VBA zmieni nazwę tabeli:

Funkcja publiczna RenameTable(ByVal strOldTableName As String, ByVal strNewTableName As String, Opcjonalnie strDBPath As String) As Boolean Dim db As DAO.Database Dim tdf As TableDef ' Pułapka na wszelkie błędy. On Error Resume Next ' Jeśli nazwa bazy danych jest pusta… If Trim$(strDBPath) = "" Następnie '… następnie ustaw Db na bieżący DB. Set db = CurrentDb() Else ' W przeciwnym razie ustaw Db na określoną otwartą bazę danych. Set db = DBEngine.Workspaces(0).OpenDatabase(strDBPath) ' Sprawdź, czy wystąpił błąd. If Err Then 'MsgBox "Nie można znaleźć bazy danych do otwarcia: " & strDBPath RenameTable = False Zakończ funkcję 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 Funkcja 'Przykład użycia Private Sub RenameTable_Example() Wywołaj RenameTable("table1", "table2") End Sub

Możesz wywołać funkcję w ten sposób:

Private Sub RenameTable_Example() Wywołaj RenameTable("table1", "table2") End Sub

Obetnij/usuń rekordy z tabeli

Ta funkcja usunie rekordy z tabeli z obsługą błędów:

Funkcja publiczna Delete_From_Table(TableName As String, Criteria As String) W przypadku błędu GoTo SubError DoCmd.SetWarnings False DoCmd.RunSQL ("DELETE * FROM " & TableName & " WHERE " & Criteria) DoCmd.SetWarnings True SubExit: Exit Function SubError ": Delete_From_Table error: " & vbCrLf & Err.Number & ": " & Err.Description Resume SubExit End Function 'Przykład użycia Public Sub Delete_From_Table_Example() Wywołanie Delete_From_Table("Table1", "num=2") End Sub

Eksportuj tabelę do Excela

Ten wiersz kodu wyeksportuje tabelę do programu Excel (nowy arkusz kalkulacyjny):

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

Lub możesz użyć tej funkcji:

Funkcja publiczna Export_Table_Excel(TableName As String, FilePath As String) DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableName, FilePath, funkcja True End 'Przykład użycia Export_Table_Excel_Example () Export_Table_Excel("Table\.xls"):\temped Napis końcowy

Powyższy kod zostanie wyeksportowany do nowego arkusza kalkulacyjnego. Zamiast tego możesz dodać tabelę do istniejącego arkusza kalkulacyjnego. Nasz artykuł na temat importowania/eksportowania w programie Access VBA omawia to bardziej szczegółowo.

Dodaj/dołącz rekordy do tabeli

Ta funkcja doda/dołączy rekord do tabeli:

Funkcja publiczna Append_Record_To_Table(TableName As String, FieldName As String, FieldValue As String) W przypadku błędu GoTo SubError Dim rs As DAO.Recordset Dim SQL As String Dim CurrentYear As Integer Ustaw rs = CurrentDb.OpenRecordset(TableName) rs.AddNew rs(FieldName) .Value = FieldValue rs.Update rs.Close Ustaw rs = Nic () Wywołaj Append_Record_To_Table("Table1", "num", 3) End Sub

Dodaj rekord do tabeli z formularza

Ta funkcja doda rekord do tabeli z formularza:

Funkcja publiczna Add_Record_To_Table_From_Form(TableName As String) W przypadku błędu GoTo SubError Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(TableName) rs.AddNew 'rs![Pole1] = Wartość1 'rs![Pole2] = Wartość2 'rs! Field3] = Wartość3 rs.Update rs.Close Ustaw rs = Nic SubExit: Wyjście z funkcji SubError: MsgBox "Refresh_Form error: " & vbCrLf & Err.Number & ": "

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave