Zac*_*k E 1 excel vba dictionary
我现在试图了解字典如何在VBA中工作,因此我创建了一个简单的类模块,一个函数,然后创建了两个子控件,但是由于我之外的原因For,该函数中的循环已完全跳过。以下是上述所有项目的代码。我确实在“工具”>“参考”中选中了Microsoft脚本运行时。我不太了解后期绑定和早期绑定的用法,因此我想知道这是否是问题之一。
目前,Set rg = LoanData.Range("AH2")它在表中,我已经尝试将该范围内的数据既作为表又作为范围,但是For如果数据不在表中,则跳过函数中的Loop。
类模块称为clsCounty
Public CountyID As Long
Public County As String
Run Code Online (Sandbox Code Playgroud)
称为ReadCounty的函数
Private Function ReadCounty() As Dictionary
Dim dict As New Dictionary
Dim rg As Range
Set rg = LoanData.Range("AH2")
Dim oCounty As clsCounty, i As Long
For i = 2 To rg.Rows.Count
Set oCounty = New clsCounty
oCounty.CountyID = rg.Cells(i, 1).Value
oCounty.County = rg.Cells(i, 2).Value
dict.Add oCounty.CountyID, oCounty
Next i
Set ReadCounty = dict
End Function
Run Code Online (Sandbox Code Playgroud)
要写入立即窗口的两个子
Private Sub WriteToImmediate(dict As Dictionary)
Dim key As Variant, oCounty As clsCounty
For Each key In dict.Keys
Set oCounty = dict(key)
With oCounty
Debug.Print .CountyID, .County
End With
Next key
End Sub
Sub Main()
Dim dict As Dictionary
Set dict = ReadCounty
WriteToImmediate dict
End Sub
Run Code Online (Sandbox Code Playgroud)
您已将范围声明为Set rg = LoanData.Range("AH2"),然后For i = 2 To rg.Rows.Count在循环中使用。这rg.Rows.Count将是1因为您的范围内只有1个单元格。该值在For循环(2)的起始值之前,因此不会执行任何操作。
即 For i = 2 to 1
rg使用完整范围声明变量。我会猜测像
With LoanData
Set rg = .Range(.Cells(1,"AH"), .Cells(.Cells(.Rows.Count, "AH").End(xlUp).Row, "AH"))
End With
Run Code Online (Sandbox Code Playgroud)