Access
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Access

Mảng đối tượng lớp VBA Ms-Access

Giới thiệu.

Tuần trước, chúng tôi đã giới thiệu ngắn gọn về Đối tượng lớp tùy chỉnh đơn giản chỉ với hai Thuộc tính, cho Độ dài Chiều rộng Các giá trị. Một phương pháp để tính toán Diện tích của bất kỳ thứ gì, với các Giá trị Chiều dài và Chiều rộng. Hy vọng bạn đã hiểu những kiến ​​thức cơ bản về Mô-đun lớp tùy chỉnh Ms-Access. Nếu không, đây là liên kết:Ms-Access Class Module và VBA. Vui lòng truy cập trang trước khi tiếp tục.

Đối tượng Mô-đun Lớp tiết kiệm rất nhiều Mã trong Chương trình của bạn. Khi bạn tìm thấy thứ gì đó mà bạn thực hiện lặp đi lặp lại trong Code, hãy nghĩ đến một Đối tượng mô-đun lớp. Mã lặp lại cũng có thể được biến thành một chức năng tiện ích, nhưng đối với Đối tượng Lớp, bạn phải thực hiện một cách tiếp cận khác.

Đối với một tác vụ đơn giản, có thể mất nhiều mã hơn để tinh chỉnh các chức năng của Đối tượng mô-đun lớp, nhưng các chương trình mô-đun chính của bạn sẽ đơn giản và tất cả các mã phức tạp được phát triển và tinh chỉnh sẽ vẫn bị ẩn với những người khác.

Nhưng hiện tại, chúng tôi có một Mô-đun Lớp đơn giản trong tay, chúng tôi sẽ thử cách tạo một mảng Đối tượng để tính Diện tích của nhiều mục.

Quy trình con ClassArray ().

Mã VBA mẫu trong Mô-đun chuẩn tạo một Mảng gồm năm Đối tượng của Lớp ClsArea và in các Giá trị Thuộc tính và Kết quả Phương thức của chúng trong Cửa sổ Gỡ lỗi. Sao chép và Dán (hoặc tốt hơn nếu bạn nhập chúng vào, để biết rõ hơn từng dòng chúng làm gì) đoạn mã sau vào Mô-đun chuẩn:

Public Sub ClassArray()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea

tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
Set tmpA = Nothing 'Remove temporary object from memory.
Next


‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With CA(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

’stop

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub
 

Nhấp vào đâu đó ở giữa Mã và nhấn F5 để thực thi Mã. Nhập các Giá trị cho Mô tả, Chiều dài và Chiều rộng từ Bàn phím cho 5 Mục khác nhau, lần lượt nhập các Giá trị cho Mô tả, Chiều dài và Chiều rộng từ Bàn phím cho 5 Mục khác nhau.

Mẫu chạy Chương trình được đưa ra bên dưới:

Description   Length        Width         Area
Door Mat       5             8             40 
Carpet         12            23            276 
Bed Room       21            23            483 
Store Room     15            25            375 
Terrace        40            50            2000 

Xem xét từng dòng mã.

Hãy để chúng tôi kiểm tra từng dòng mã. Trong vùng khai báo, chúng tôi đã khai báo một Biến đối tượng tmpA của Loại ClsArea. Trong dòng thứ hai đã khai báo một Mảng CA () trống của Loại ClsArea. Số phần tử cần thiết sẽ được đo lại kích thước sau này trong chương trình.

Trong hai dòng tiếp theo, chúng tôi đã khai báo các biến title thuộc loại Chuỗi và j, L, Ư các biến kiểu Số nguyên dài.

Tiếp theo, biến tiêu đề được khởi tạo bằng chuỗi ‘ClassArray’ và sẽ được sử dụng làm Tiêu đề trong Hàm InputBox (). Đối với… .Next vòng lặp được đặt bằng một biến điều khiển j để chạy vòng lặp năm lần. Sau hai dòng nhận xét tiếp theo, nút Đặt tuyên bố bản trình bày (cấp phát bộ nhớ) Đối tượng lớp ClsArea trong bộ nhớ với tên tmpA .

Ba dòng mã tiếp theo phân phát giá trị Đầu vào cho strDesc , dblLength, dblWidth Thuộc tính của đối tượng lớp tmpA.

Sau dòng nhận xét tiếp theo, Đối tượng lớp ClsArea (CA) được đo lại kích thước cho 1 đến j lần (1 đến 1 lần) bằng cách giữ nguyên các phần tử Đối tượng hiện có, nếu có (đây là Đối tượng đầu tiên trong Mảng). Điều này sẽ tiếp tục tăng, thông qua ReDim câu lệnh, thành 1 đến 2, 1 đến 3, 1 đến 4 và 1 đến 5 bằng cách giữ nguyên các giá trị đối tượng trước đó, trong For. . . Vòng lặp tiếp theo. Bảo tồn từ khóa đảm bảo rằng các đối tượng mảng hiện có không bị mất.

Lưu ý: Câu lệnh Re-Dimension tăng / giảm số phần tử đối tượng được chỉ định nhưng xóa các đối tượng hiện có đã được tải vào mảng trước đó mà không có Bảo tồn từ khóa.

Bộ trong dòng tiếp theo sao chép Đối tượng tmpA, với dữ liệu của nó vào CA (j) Đối tượng ClsArea mới được tạo j phần tử mảng.

Dòng tiếp theo Đặt tmpA =Không có gì xóa đối tượng tạm thời khỏi bộ nhớ.

Vòng lặp For… Next lặp lại hành động này bốn lần nữa để nhập các mục khác vào đối tượng tạm thời mới được khởi tạo tmpA, lần lượt và sao chép đối tượng vào Mảng đối tượng CA.

Hai dòng tiếp theo, sau dòng chú thích, tìm phạm vi chỉ mục Mảng đối tượng (tìm số chỉ mục thấp nhất và cao nhất.

Debug.Print tiếp theo câu lệnh in một dòng tiêu đề trong 14 vùng cột trong Cửa sổ gỡ lỗi. Các Đối với. . . Tiếp theo vòng lặp với L Ư phạm vi chỉ số mảng liên kết chạy các câu lệnh bên trong để truy cập từng Đối tượng từ Mảng CA, với số chỉ mục trong biến điều khiển j.

Tham chiếu đối tượng hiện tại được đặt trong Với. . . Kết thúc với cấu trúc, thay vì lặp lại Tên đối tượng CA (j) .strDesc, CA (j) .dblLength, CA (j) .dblWidth CA (j) .Area để in kết quả Giá trị thuộc tính và Vùng phương thức () của đối tượng trên Cửa sổ gỡ lỗi.

Xóa biểu tượng nhận xét khỏi ‘Dừng câu lệnh để tạo một khoảng dừng trong Chương trình trên câu lệnh Stop. Chạy lại mã và nhập 5 chi tiết mục để bạn có thể thử nghiệm với Đối tượng mảng. Bạn có thể giải quyết một cách chọn lọc bất kỳ Thuộc tính Đối tượng nào, với số Chỉ mục Mảng, để chỉnh sửa hoặc in bất kỳ giá trị nào trên Cửa sổ Gỡ lỗi như được hiển thị bên dưới.


Câu lệnh Đặt CA (j) =Không có gì trong For. . . Vòng lặp tiếp theo xóa các đối tượng mảng, từng đối tượng một khỏi Bộ nhớ.

Truyền Mảng Đối tượng Lớp làm Tham số Hàm.

Chúng ta có thể chuyển Mảng đối tượng lớp dưới dạng Tham số cho một chương trình, như chúng ta đã làm với Kiểu dữ liệu do người dùng xác định.

Hãy để chúng tôi tạo một Chương trình con in đơn giản, bằng cách cắt Mã phần in của chương trình chính và đặt nó vào chương trình mới.

Sao chép mã quy trình con ClassArray (), dán mã đó vào cùng một Mô-đun chuẩn và đổi tên thành ClassArray2 (), như hình bên dưới.

Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea

     tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
 Set tmpA = Nothing 'Remove temporary object from memory.
Next

‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With CA(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

’stop

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub
 

Mã ClassArray2 không có phần in.

Tạo một Quy trình con mới như được cung cấp bên dưới:

Public Sub ClassPrint(ByRef clsPrint() As ClsArea)
Dim L As Long, U As Long
Dim j As Long

End Sub

Đánh dấu Phần in lên đến câu lệnh ‘Stop trong Chương trình ClassArray2 (), cắt vùng được đánh dấu của Mã và dán nó bên dưới Dim trong ClassPrint () Chương trình. Phiên bản sửa đổi của cả hai Mã được cung cấp bên dưới:

Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea
     tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
 Set tmpA = Nothing 'Remove temporary object from memory.
Next

Call ClassPrint(CA) ‘Pass the Object Array to print routine

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub

Chương trình ClassPrint ().

Public Sub ClassPrint(ByRef clsPrint() As ClsArea)
Dim L As Long, U As Long
Dim j As Long

'Printing Section
'Print the Array Contents into the Debug Window.
L = LBound(clsPrint)
U = UBound(clsPrint)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With clsPrint(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

End Sub

Kiểm tra các thay đổi mã trong cả hai chương trình và sửa chữa, nếu có. Nhấp vào giữa mã ClassArray2 () và nhấn F5 để chạy chương trình.

Câu lệnh Call trong chương trình đầu tiên chuyển Mảng đối tượng lớp CA dưới dạng Tham số ByRef đến chương trình con ClassPrint (). Chương trình in Thuộc tính đối tượng và gọi hàm Area () để tính toán và trả về giá trị để in.

Tuần tới, chúng ta sẽ tìm hiểu cách sử dụng mô-đun Lớp ClsArea làm Lớp cơ sở để tạo Đối tượng lớp VBA mới nhằm tính toán Khối lượng của cái gì đó.

  1. Mô-đun lớp MS-Access và VBA
  2. Mảng đối tượng lớp VBA MS-Access
  3. Lớp cơ sở MS-Access và các đối tượng có nguồn gốc
  4. Lớp cơ sở VBA và các đối tượng có nguồn gốc-2
  5. Lớp cơ sở và các biến thể đối tượng có nguồn gốc
  6. Tập bản ghi Ms-Access và Mô-đun lớp
  7. Truy cập mô-đun lớp và các lớp gói
  8. Chuyển đổi chức năng lớp bao bọc
  9. Thông tin cơ bản về Ms-Access và Đối tượng Bộ sưu tập
  10. Mô-đun lớp Ms-Access và Đối tượng Bộ sưu tập
  11. Bản ghi Bảng trong Đối tượng và Biểu mẫu Bộ sưu tập
  12. Khái niệm cơ bản về đối tượng từ điển
  13. Khái niệm cơ bản về đối tượng từ điển-2
  14. Sắp xếp các Mục và Khoá Đối tượng Từ điển
  15. Hiển thị Bản ghi từ Từ điển sang Biểu mẫu
  16. Thêm các đối tượng lớp dưới dạng các mục từ điển
  17. Cập nhật Mục Từ điển Đối tượng Lớp trên Biểu mẫu


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 loại sửa chữa cơ sở dữ liệu

  2. Cách hiển thị các mục bị ẩn trong trình duyệt đối tượng VBA

  3. Tìm kiếm dữ liệu truy cập của Microsoft với Elasticsearch

  4. Gặp gỡ Michal Bar và tôi tại Microsoft Ignite!

  5. Sự khác biệt giữa MS Access và SQL là gì?