作者:一个人的靓靓_523 | 来源:互联网 | 2023-05-23 16:34
我正在VBA中编写一个Excel宏来向图书馆顾客发送电子邮件,提醒他们过期的材料.数据来自电子表格,其中包含数据
UserID Name Email Title Author Barcode Call Number Borrowed Date Due Date
user2 Jones, Bob bob@jones Title1 A. Baker a0001 H00027C 11/23/2014 1/1/2015
user2 Jones, Bob bob@jones Title2 C. Dalton b0002 S00406R 11/23/2014 1/1/2015
user3 Smith, Mary bob@jones Title3 E. Franklin c0003 M00174R 11/23/2014 1/1/2015
user3 Smith, Mary mary@smith Title4 F. Gelt d0004 M00157G 11/23/2014 1/1/2015
user3 Smith, Mary mary@smith Title5 H. Ivers e0005 M00081G 11/23/2014 1/1/2015
我开始使用用户定义的书籍和赞助人类型,并给每个赞助人一系列书籍.我尝试将顾客传递给一个函数来生成电子邮件文本,但显然我无法将用户定义的类型作为参数传递.所以,现在我正在上课.
我想要一个Book
有成员的班级
Public book_title As String
Public date_borrowed As Date
Public date_due As Date
Public barcode As String
Public call_number As String
和一个EmailData
有成员的班级
Public email_text As String
Public patron_name As String
Public patron_email As String
Public sender_email As String
Public book_list() As Book
其中book_list
是一个Book
对象数组和一个方法sendEmail()
.
但是,这不起作用,因为显然我无法将Book
对象数组定义为对象的成员EmailData
.
那么,我的方法是什么?我听说过收藏品.这会是一个解决方案吗?
1> Sorceri..:
根据我的评论,我会使用一个集合.以下是定义和初始化的方法
Public book_list As Collection
'intitalize the collection in the constructor of the class
Private Sub Class_Initialize()
Set book_list = New Collection
End Sub
并使用它
book_list.Add
dim bk as Book
set bk = book_list.Item(indexNumber)
2> Tmdean..:
有两种选择。
最简单的就是使book_list为Variant类型。您可以使用ReDim将其视为数组。您可以使用Variant类型的变量来存储对象引用,就像使用对象变量一样。
另一个选择是使book_list为私有变量并创建访问器方法。无论如何,这都是使用类的首选方式,如果您首先使用类,则最好观察一下良好的面向对象设计。您的课程看起来像这样。
Private email_text As String
...
Private book_list() As Book
Private Sub Class_Initialize()
email_text = "default email text"
...
ReDim book_list(10)
End Sub
Public Function GetBook(index As Long) As Book
Set GetBook = book_list(index)
End Function
Public Sub SetBook(index As Long, b As Book)
Set book_list(index) = b
End Sub