Giới thiệu.
Đôi khi, một Mô-đun lớp cụ thể cần được khởi tạo nhiều lần, để sử dụng một bộ giá trị tương tự cho một Ứng dụng cụ thể.
Ví dụ:Mô-đun Lớp ClsArea của chúng tôi, chúng tôi đã thiết kế để tính toán diện tích thảm của các Phòng là một ứng cử viên cho các ứng dụng tương tự. Giả sử rằng chúng ta muốn tìm xem chúng ta cần đặt bao nhiêu viên gạch lát sàn trong một căn phòng thì chúng ta cũng có thể nhập các giá trị Chiều dài và Chiều rộng của Ngói, bên cạnh các giá trị kích thước của Sàn. Vì cả Tầng và Ngói đều có các giá trị Thuộc tính tương tự như đầu vào, chúng ta có thể sử dụng hai phiên bản của Mô-đun lớp ClsArea, một phiên bản cho khu vực FLOOR và phiên bản thứ hai cho khu vực TILE. Diện tích sàn / Diện tích ô gạch cho biết tổng số ô lát cho một căn phòng cụ thể.
Hai phiên bản của cùng một mô-đun lớp.
Chúng tôi có thể thực hiện việc này bằng cách tạo hai phiên bản khác nhau của Mô-đun lớp ClsArea trong Chương trình mô-đun tiêu chuẩn nếu chỉ có một Phòng.
Public Sub FloorTiles() Dim FLOOR As ClsArea Dim TILES As ClsArea Dim flrArea As Double, tilearea As Double Dim lngTiles As Long Set FLOOR = New ClsArea Set TILES = New ClsArea FLOOR.strDesc = "Bed Room1" FLOOR.dblLength = 25 FLOOR.dblWidth = 15 flrArea = FLOOR.Area() TILES.strDesc = "Off-White" TILES.dblLength = 2.5 TILES.dblWidth = 1.25 tilearea = TILES.Area() lngTiles = flrArea / tilearea Debug.Print FLOOR.strDesc & " Required Tiles: " & lngTiles & " Numbers - Color: " & TILES.strDesc Set FLOOR = Nothing Set TILES = Nothing End Sub
Xử lý một mảng đối tượng.
Tuy nhiên, nếu chúng ta cần áp dụng phương pháp trên cho một mảng gồm nhiều phòng với các kích thước hoặc màu sắc gạch lát khác nhau thì sao? Câu trả lời là tạo Mô-đun lớp mới với hai bản sao của ClsArea giống nhau Lớp, một ví dụ cho Tầng, và cái còn lại cho Ô Tính chất. Cả hai phiên bản đều được bao bọc trong Mô-đun lớp mới.
Hãy để chúng tôi làm điều đó.
- Mở Cơ sở dữ liệu của bạn và hiển thị Cửa sổ chỉnh sửa mã (ALT + F11).
- Chọn Mô-đun lớp từ Chèn Thực đơn.
- Thay đổi Tên Giá trị thuộc tính thành ClsTiles .
- Sao chép và dán Mã VBA sau vào Mô-đun lớp ClsTiles và lưu Mã:
Option Compare Database Option Explicit Private pFLOOR As ClsArea Private pTILES As ClsArea Private Sub Class_Initialize() Set pFLOOR = New ClsArea Set pTILES = New ClsArea End Sub Private Sub Class_Terminate() Set pFLOOR = Nothing Set pTILES = Nothing End Sub Public Property Get Floor() As ClsArea Set Floor = pFLOOR End Property Public Property Set Floor(ByRef NewValue As ClsArea) Set pFLOOR = NewValue End Property Public Property Get Tiles() As ClsArea Set Tiles = pTILES End Property Public Property Set Tiles(ByRef NewValue As ClsArea) Set pTILES = NewValue End Property Public Function NoOfTiles() As Long NoOfTiles = pFLOOR.Area() / pTILES.Area() End Function
Cả hai phiên bản, pFLOOR và pTILES đều được khai báo là Thuộc tính Riêng của Đối tượng Lớp ClsTiles.
Class_Initialize () Chương trình con khởi tạo cả hai đối tượng trong bộ nhớ khi ClsTiles Mô-đun lớp được khởi tạo trong chương trình người dùng.
Class_Termina () chương trình con xóa cả hai phiên bản (pFLOOR và pTILES) khỏi bộ nhớ khi phiên bản Mô-đun lớp ClsTiles được đặt thành Không có gì trong chương trình người dùng.
Nhận và Đặt Các thủ tục thuộc tính cho phép truy xuất và gán các giá trị, từ và đến cá thể pFLOOR tương ứng, trong Đối tượng lớp ClsTiles.
Thủ tục Lấy và Đặt thuộc tính tiếp theo cho phép các hoạt động tương tự trong phiên bản pTILES của Lớp ClsArea.
Chúng tôi đã thêm một chức năng mới NoOfTiles () trong Mô-đun lớp mới, để tính toán số lượng ô xếp, dựa trên Kích thước Tầng và Kích thước Ô.
Hãy để chúng tôi viết một Chương trình và tìm hiểu cách sử dụng nhiều phiên bản của cùng một Đối tượng Lớp, trong Mô-đun Lớp mới:ClsTiles.
- Sao chép và dán Mã VBA sau vào Mô-đun chuẩn:
Public Sub TilesCalc() Dim FTiles As ClsTiles Dim TotalTiles As Long Set FTiles = New ClsTiles FTiles.Floor.strDesc = "Warehouse" FTiles.Floor.dblLength = 100 FTiles.Floor.dblWidth = 50 FTiles.Tiles.dblLength = 2.5 FTiles.Tiles.dblWidth = 1.75 TotalTiles = FTiles.NoOfTiles() Debug.Print "Site Name", "Floor Area", "Tile Area", "No. of Tiles" Debug.Print FTiles.Floor.strDesc, FTiles.Floor.Area, FTiles.Tiles.Area, TotalTiles End Sub
- Giữ Cửa sổ gỡ lỗi mở (CTRL + G) để in dữ liệu kiểm tra.
- Nhấp vào một nơi nào đó ở giữa Mã VBA và nhấn F5 Phím để chạy Mã. Kết quả được in trên Cửa sổ gỡ lỗi.
Nếu bạn muốn tính toán các yêu cầu về gạch của một số phòng hoặc phòng của một số tầng của một tòa nhà cao tầng thì bạn nên chạy chương trình trên một số lần và ghi lại các giá trị, điều này thực tế là rất khó.
Yêu cầu tìm ô xếp của một số phòng.
Bây giờ, chúng ta hãy viết một chương trình khác để tìm các yêu cầu về Ngói của một số Phòng, với Mảng ClsTiles Đối tượng bằng cách nhập các giá trị Thuộc tính trực tiếp từ bàn phím.
- Sao chép và dán mã VBA sau vào một mô-đun chuẩn.
Public Sub TilesCalc2() Dim tmpFT As ClsTiles Dim FTiles() As ClsTiles Dim j As Long, L As Long, H As Long For j = 1 To 3 Set tmpFT = New ClsTiles 'Floor dimension With tmpFT.Floor .strDesc = InputBox(Str(j) & ") Floor Desc", , 0) .dblLength = InputBox(Str(j) & ") Floor Length", , 0) .dblWidth = InputBox(Str(j) & ") Floor Width", , 0) End With 'Tile Dimension With tmpFT.Tiles .strDesc = InputBox(Str(j) & ") Tiles Desc", , 0) .dblLength = InputBox(Str(j) & ") Tile Length", , 0) .dblWidth = InputBox(Str(j) & ") Tile Width", , 0) End With ReDim Preserve FTiles(1 To j) As ClsTiles Set FTiles(j) = tmpFT Set tmpFT = Nothing Next 'Take Printout L = LBound(FTiles) H = UBound(FTiles) Debug.Print "FLOOR", "Floor Area", "TILES", "Tile Area", "Total Tiles" For j = L To H With FTiles(j) Debug.Print .Floor.strDesc, .Floor.Area(), .Tiles.strDesc, .Tiles.Area(), .NoOfTiles End With Next 'Remove all objects from memory For j = L To H Set FTiles(j) = Nothing Next End Sub
- Giữ Cửa sổ gỡ lỗi mở để in đầu ra ở đó.
- Chạy Mã như trước và nhập các giá trị cho kích thước Tầng và Ngói cho ba Phòng.
Như bạn có thể thấy từ đoạn mã trên rằng cả hai giá trị của kích thước Room và Tile đều đi vào cùng một cá thể Mảng đối tượng lớp, cạnh nhau.
Chương trình trên là bản demo chỉ chạy cho ba bộ giá trị trong For. . . Vòng lặp tiếp theo. Nó có thể được sửa đổi bằng một vòng lặp có điều kiện chạy trong một số lần bắt buộc cho đến khi mã ngắt có điều kiện kết thúc chương trình.
Chương trình có thể được sửa đổi để lưu từng bộ giá trị dữ liệu và kết quả tính toán trong một Bảng để tham khảo trong tương lai.
A Lớp gói là Vùng chứa Lớp dành cho các thể hiện của Lớp, Cấu trúc dữ liệu khác hoặc tập hợp các thể hiện của các đối tượng khác. Ở đây, chúng tôi đã sử dụng nó để giữ hai phiên bản của cùng một lớp Đối tượng.
Danh sách Tất cả các Liên kết về Chủ đề này.
- Mô-đun lớp MS-Access và VBA
- Mảng đối tượng lớp VBA MS-Access
- Lớp cơ sở MS-Access và các đối tượng có nguồn gốc
- Lớp cơ sở VBA và các đối tượng có nguồn gốc-2
- Lớp cơ sở và các biến thể đối tượng có nguồn gốc
- Tập bản ghi Ms-Access và Mô-đun lớp
- Truy cập mô-đun lớp và các lớp gói
- Chuyển đổi chức năng lớp bao bọc
- Thông tin cơ bản về Ms-Access và Đối tượng Bộ sưu tập
- Mô-đun lớp Ms-Access và Đối tượng Bộ sưu tập
- Bản ghi Bảng trong Đối tượng và Biểu mẫu Bộ sưu tập
- Khái niệm cơ bản về đối tượng từ điển
- Khái niệm cơ bản về đối tượng từ điển-2
- Sắp xếp các mục và khóa đối tượng từ điển
- Hiển thị Bản ghi từ Từ điển sang Biểu mẫu
- Thêm các đối tượng lớp dưới dạng các mục từ điển
- Thêm các đối tượng lớp dưới dạng các mục từ điển
- Cập nhật Mục Từ điển Đối tượng Lớp trên Biểu mẫu