我想创建一个机场集合。
机场有很多参数,但为了简单起见,我们假设机场类在机场类模块中定义如下:
'Class Airport
Public name As String ' Stores name of the airport
Public flights As Long ' Stores number of flights in that airport
然后我的模块相当大,但这是我从 Excel 文件读取列并将值存储在机场集合中的部分,删除重复的值:
Dim airports As Collection
Set airports = New Collection
'Putting airports in collection
Dim c As Range
For Each c In wsToCheck.Range("D:D")
On Error Resume Next
Dim airport As New Airport
airport.name = c.Value
airports.Add airport, c.Value
On Error GoTo 0
Next
如果我在中间做
调试.打印机场.名称
我知道这个名字,但是当我知道的时候
调试.打印机场(1).名称
没有打印任何内容(但也没有错误)。
我之前使用过字符串集合并且它可以工作。但我现在每个机场都需要不止一根绳子。
我的代码有什么问题?我使用集合正确吗?
您的代码有两个问题。
第一个是可能正在创建一个Collection
包含数百万个项目,因为您要迭代的范围是 D 列的全部(D:D
)。这个是需要绑定的。
第二个问题是你的变量名airport
与你的班级名称完全相同Airport
。这很容易混淆 VBA,因此您需要为其中之一选择不同的名称。
这是一个有效的示例:
Option Explicit
Sub test()
Dim wsToCheck As Worksheet
Set wsToCheck = ThisWorkbook.Sheets("Sheet1")
Dim airportNames As Range
Set airportNames = wsToCheck.Range("D1:D10")
Dim airports As Collection
Set airports = New Collection
'Putting airports in collection
Dim i As Long
Dim c As Range
For Each c In airportNames
Dim thisAirport As Airport
'Debug.Print c.Address & "=" & c.Value
Set thisAirport = New Airport
thisAirport.name = c.Value
thisAirport.flights = i
i = i + 1
airports.Add thisAirport
Next
'now print them out
For i = 1 To airports.Count
Debug.Print airports(i).name & ", " & airports(i).flights
Next i
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)