jiw*_*heo 3 collections excel vba class
我正在尝试使用日期集合作为类属性,但遇到了问题。从本质上讲,我想存储多个vacLocation
中emp_vacDates
,并将它送入employee.Vaca
。
我没有问题 Employee.Name
我得到的错误是
编译错误:参数不是可选的
在Vaca
Let 声明中
我的代码是:
Sub Vacation()
Dim i As Integer
Dim rowNum As Long: rowNum = 5
Dim colNum As Long: colNum = 4
Dim onePersonLoop As Range
Dim nameLocation As Range
Dim vacLocation As Range
Dim emp_vacDates As Collection
Dim emps As Collection
Dim employee As EmployeeClass
For i = 2 To 2
With ActiveWorkbook.Worksheets(i)
Set onePersonLoop = .Cells(rowNum, colNum).Offset(-1).End(xlToRight).Offset(, -2)
Set emps = New Collection
For rowNum = 5 To 5
Set nameLocation = .Cells(rowNum, colNum).Offset(-1, -1).EntireRow.Cells(1, 2)
Set employee = New EmployeeClass
employee.Name = nameLocation.Value
Set emp_vacDates = New Collection
For colNum = 4 To 6
Set vacLocation = .Cells(rowNum, colNum).Offset(-3)
If .Cells(rowNum, colNum) = "v" Or .Cells(rowNum, colNum) = "V" Then
emp_vacDates.Add vacLocation.Value
End If
Next colNum
employee.Vaca = emp_vacDates
emps.Add employee
Debug.Print employee.Name
Debug.Print employee.Vaca
Next rowNum
End With
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
我的 EmployeeClass 类模块设置如下
Option Explicit
Dim vName As String
Dim vVaca As Collection
Public Property Get Name() As String
Name = vName
End Property
Public Property Let Name(nme As String)
vName = nme
End Property
Public Property Get Vaca() As Collection
Vaca = vVaca
End Property
Public Property Let Vaca(vcl As Collection)
vVaca = vcl
End Property
Run Code Online (Sandbox Code Playgroud)
收藏应该是Set
。像这样:
Public Property Get Vaca() As Collection
Set Vaca = vVaca
End Property
Public Property Let Vaca(vcl As Collection)
Set vVaca = vcl
End Property
Run Code Online (Sandbox Code Playgroud)
此外,您不能像这样 debug.print 一个集合:
Debug.Print employee.Vaca
尝试在那里做其他事情,例如:
Debug.Print employee.Vaca.Item(1)
Run Code Online (Sandbox Code Playgroud)
或者写一个函数,检查集合中是否有项,0
如果没有则打印。像这样的东西:
Public Function VacaToString(Optional index = 1) As String
If Vaca.Count = 0 Then
VacaToString = 0
Else
VacaToString = Vaca(index)
End If
End Function
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样 debug.print 它:
Debug.Print employee.VacaToString
Run Code Online (Sandbox Code Playgroud)