我有一个非常大的 Excel 表,其中包含以下元素:
Name Date StartWorkedAt FinishWorkAt HoursWorked
我正在创建一个按钮来操作这些数据,但是在决定存储所有数据的格式时遇到了麻烦。列表中的每个人都有多个他们都工作的日期,所以我希望能够检查开始以及每个人在不同日期的完成时间。我写了一个简短的脚本来计算我有多少个唯一的名字,这样我就可以使用一个多维数组来访问每个人的数据,如下所示:
workTable[0][0]
因此,理想情况下,这会给我第一个人在他/她工作的第一个日期的开始和/或结束时间。但我遇到的问题是数据有多种格式。 name 是一个字符串,date 是一个 Date,hoursWorked 是一个整数。
有什么更简单的方法可以将数据存储在 VBA 中,以便我可以单独访问每个人并找出他们工作的日期以及他们开始和结束的时间?
最佳答案
使用 Class module
为您需要的每个列提供属性并创建该类的集合。
例如,创建一个具有以下属性的类模块(名为 ExcelRow):
Private pName As String
Private pDate As Date
Private pStartWorkedAt As Date
Private FinishWorkAt As Date
Private HoursWorked As Integer
您将需要每个这些私有(private)变量的公共(public)属性。下面是为 pName 属性设置 Get 和 Let 的示例。公共(public)变量可以以不同的方式命名为私有(private)变量:
Public Property Get Name() As String
Name = pName
End Property
Public Property Let Name(Value As String)
pName = Value
End Property
然后您可以拥有一个集合并向其中添加每个类模块行的实例:
Dim ExcelRows As Collection
Dim Row As ExcelRow
Set ExcelRows = New Collection
Set Row = New ExcelRow
Row.Name = "Joe"
Row.HourseWorked = 3
ExcelRows.Add Row
Set Row = New ExcelRow
Row.Name = "Sam"
Row.HourseWorked = 54
ExcelRows.Add Row
'Or you could use a For Loop for this
关于vba - 在 VBA 中,如何将整个 Excel 表存储到包含所有相关子信息的易于访问的数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37474891/