Truy cập Bảng VBA - Cập nhật, Đếm, Xóa, Tạo, Đổi tên, Xuất

Hướng dẫn này sẽ dạy bạn cách làm việc với Access Tables bằng VBA.

Truy cập bảng VBA

Để bắt đầu, chúng tôi sẽ trình bày các lệnh đơn giản để làm việc với Bảng trong Access. Phần sau của hướng dẫn này, chúng tôi sẽ chỉ cho bạn các chức năng được phát triển chuyên nghiệp đầy đủ để làm việc với các bảng trong Access.

Tạo bảng

Mã này sẽ sử dụng SQL để tạo một bảng có tên “Table1” với các trường “ID” và “Name”:

 Làm mờ table_name dưới dạng chuỗi Làm mờ các trường dưới dạng chuỗi table_name = "Table1" fields = "([ID] varchar (150), [Name] varchar (150))" CurrentDb.Execute "CREATE TABLE" & table_name & các trường

Đóng bảng

Dòng mã VBA này sẽ đóng một Bảng (lưu các thay đổi):

DoCmd.Close acTable, "Table1", acSaveYes

Để đóng Bảng mà không lưu:

DoCmd.Close acTable, "Table1", acSaveNo

Xóa bảng

Mã này sẽ xóa một Bảng (lưu ý: trước tiên Bảng phải được đóng lại):

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

Đổi tên bảng:

Dòng mã này sẽ đổi tên Bảng Access:

DoCmd.Rename "Table1", acTable, "Table1_New"

Một tùy chọn khác là sử dụng thuộc tính TableDefs của một đối tượng cơ sở dữ liệu.

Đặt tdf = db.TableDefs (strOldTableName) tdf.Name = strNewTableName

Bàn trống / Xóa

Mã VBA này sẽ làm trống một Bảng:

DoCmd.RunSQL "XÓA * TỪ" & "Table1"

Cắt ngắn bảng / Xóa bản ghi

Dòng mã VBA này sử dụng SQL để xóa các bản ghi khỏi bảng đáp ứng các tiêu chí nhất định:

DoCmd.RunSQL ("XÓA * TỪ" & "Table1" & "WHERE" & "num = 2")

Xuất bảng sang Excel

Để xuất một Bảng sang Excel, hãy sử dụng DoCmd.OutputTo phương pháp:

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

hoặc sử dụng DoCmd.TransferS Spreadsheet phương pháp:

DoCmd.

Cập nhật bảng

Đoạn mã sau sẽ cập nhật bản ghi mà không hiển thị thông báo cảnh báo:

DoCmd.SetWarnings (Sai) DoCmd.RunSQL "Cập nhật ProductsT SET ProductsT.ProductName = 'Product AAA' WHERE (((ProductsT.ProductID) = 1))"

Truy cập các chức năng bảng VBA

Các ví dụ mã trên là các lệnh đơn giản bạn có thể sử dụng để tương tác với Bảng bằng VBA. Tuy nhiên, bạn thường sẽ cần thêm nhiều mã hỗ trợ hơn (bao gồm cả xử lý lỗi) để sử dụng đúng các lệnh này. Dưới đây, bạn sẽ tìm thấy các chức năng phát triển chuyên nghiệp để làm việc với Bảng trong Access.

Bản ghi bảng đếm

Hàm này sẽ đếm số lượng bản ghi trong một bảng:

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 ("Chọn count (*) làm rcount từ" & TableName) .OpenRecordset If (r .EOF) Sau đó c = 0 Khác c = Nz (r! RCount, 0) Kết thúc Nếu Count_Table_Records = c Thoát Hàm Err: Gọi MsgBox ("Đã xảy ra lỗi:" & Err.Description, vbExclamation, "Lỗi") Kết thúc Hàm ' Ví dụ sử dụng Private Sub Count_Table_Records_Example () MsgBox (Count_Table_Records ("Table1")) End Sub

Kiểm tra xem bảng có tồn tại chức năng không

Hàm này sẽ kiểm tra xem có tồn tại một bảng hay không, trả về TRUE hoặc FALSE:

Chức năng công khai TableExists (ByVal strTableName As String) As Boolean 'Chức năng: Xác định xem bảng có tồn tại trong cơ sở dữ liệu Access hay không' Đối số: strTablename: Tên bảng cần kiểm tra Dim tdf As DAO.TableDef On Error Resume Next Set tdf = CurrentDb.TableDefs (strTableName ) TableExists = (Err.Number = 0) Hàm kết thúc

Đây là một ví dụ về hàm đang được sử dụng:

Private Sub TableExists_Example () If VBA_Access_Checks.TableExists ("Table") = True Then MsgBox ("Table was found!") Else MsgBox ("Table not found!") End If End Sub

Tạo chức năng bảng

Hàm này sẽ tạo một Bảng trong Access VBA trong Cơ sở dữ liệu hiện tại:

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 = "TẠO BẢNG" & table_name & "(" Đối với intCounter = 0 Đến 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 End Function

Hàm này sẽ trả về TRUE nếu bảng được tạo thành công hoặc FALSE nếu bảng không được tạo.

Bạn có thể gọi hàm như sau:

Private Sub CreateTable_Example () Gọi CreateTable ("f1, f2, f3, f4", "ttest") End Sub

Xóa / Bỏ chức năng bảng

Hàm này sẽ xóa một bảng nếu nó tồn tại:

Chức năng công khai DeleteTableIfExists (TableName As String) If Not IsNull (DLookup ("Name", "MSysObjects", "Name = '" & TableName & "'")) Sau đó DoCmd.SetWarnings Sai DoCmd. Đóng acTable, TableName, acSaveYes DoCmd. DeleteObject acTable = acDefault, TableName Debug.Print "Table" & TableName & "đã xóa…" DoCmd.SetWarnings True End If End Function

Bạn có thể gọi hàm như sau:

Private Sub DeleteTableIfExists_Example () Call DeleteTableIfExists ("Table1") End Sub

Chức năng bảng trống

Hàm này sẽ làm trống một bảng nếu nó tồn tại:

Public Function EmptyTable (TableName As String) If Not IsNull (DLookup ("Name", "MSysObjects", "Name = '" & TableName & "'")) Thì DoCmd.SetWarnings Sai DoCmd.RunSQL "DELETE * FROM" & TableName Debug.Print "Table" & TableName & "emptied…" DoCmd.SetWarnings True End If End Function

Bạn có thể gọi hàm như sau:

Private Sub EmptyTable_Example () Call EmptyTable ("Table1") End Sub

Đổi tên chức năng bảng

Hàm VBA này sẽ đổi tên bảng:

Chức năng công cộng RenameTable (ByVal strOldTableName As String, ByVal strNewTableName As String, strDBPath As String tùy chọn) As Boolean Dim db As DAO.Database Dim tdf As TableDef 'Trap cho bất kỳ lỗi nào. Khi tiếp tục lỗi Tiếp theo 'Nếu tên cơ sở dữ liệu trống … Nếu Trim $ (strDBPath) = "" Sau đó "… thì hãy đặt Db thành Db hiện tại. Đặt db = CurrentDb () Else 'Nếu không, hãy đặt Db thành cơ sở dữ liệu đang mở được chỉ định. Đặt db = DBEngine.Workspaces (0) .OpenDatabase (strDBPath) 'Xem có lỗi xảy ra không. If Err Then 'MsgBox "Không thể tìm thấy cơ sở dữ liệu để mở:" & 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 'Ví dụ sử dụng Private Sub RenameTable_Example () Call RenameTable ("table1", "table2") End Sub

Bạn có thể gọi hàm như sau:

Private Sub RenameTable_Example () Gọi RenameTable ("table1", "table2") End Sub

Cắt bớt / Xóa bản ghi khỏi bảng

Chức năng này sẽ xóa các bản ghi khỏi bảng có xử lý lỗi:

Hàm công khai Delete_From_Table (TableName As String, Criteria As String) Khi Lỗi GoTo SubError DoCmd.SetWarnings False DoCmd.RunSQL ("DELETE * FROM" & TableName & "WHERE" & Criteria) DoCmd.SetWarnings True SubExit: Exit Function SubError " Lỗi Delete_From_Table: "& vbCrLf & Err.Number &": "& Err.Description Resume SubExit End Function 'Ví dụ sử dụng Public Sub Delete_From_Table_Example () Gọi Delete_From_Table (" Table1 "," num = 2 ") End Sub

Xuất bảng sang Excel

Dòng mã này sẽ xuất một Bảng sang Excel (một bảng tính mới):

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

Hoặc bạn có thể sử dụng chức năng này:

Hàm công khai Export_Table_Excel (TableName As String, FilePath As String) DoCmd.TransferS Spreadsheet acExport, acS SpreadsheetTypeExcel9, TableName, FilePath, True End Function 'Ví dụ sử dụng Sub Export_Table_Excel_Example () Export_Table_Excel ("Table1", "c: \ temp \ Exported") Kết thúc Sub

Đoạn mã trên sẽ xuất sang một bảng tính mới. Thay vào đó, bạn có thể thêm bảng vào bảng tính hiện có. Bài viết của chúng tôi về Nhập / Xuất trong Access VBA trình bày chi tiết hơn về vấn đề này.

Thêm / Nối Bản ghi vào Bảng

Hàm này sẽ thêm / nối một bản ghi vào một bảng:

Public Function Append_Record_To_Table (TableName As String, FieldName As String, FieldValue As String) Khi Lỗi GoTo SubError Dim rs As DAO.Recordset Dim SQL As String Dim CurrentYear As Integer Set rs = CurrentDb.OpenRecordset (TableName) rs.AddNew rs (TableName) rs.AddNew rs .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 'Sử dụng Ví dụ Private Sub Append_Record_To_Table_Example () Gọi Append_Record_To_Table ("Table1", "num", 3) End Sub

Thêm bản ghi vào bảng từ biểu mẫu

Hàm này sẽ thêm bản ghi vào bảng từ một biểu mẫu:

Chức năng công cộng Add_Record_To_Table_From_Form (TableName As String) Khi Lỗi GoTo SubError Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset (TableName) rs.AddNew 'rs! [Field1] = Value1' rs! [Field2] = Value2 '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

Bạn sẽ giúp sự phát triển của trang web, chia sẻ trang web với bạn bè

wave wave wave wave wave