私有函数跳过循环

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)

Tom*_*Tom 5

您已将范围声明为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)