【问题标题】:Excel VBA for loop a Named ListExcel VBA for循环命名列表
【发布时间】:2013-12-03 21:25:50
【问题描述】:

我有一个电子表格,其中包含一周中的一列数据,并使用宏来执行 VBA。 A 列是星期几,B 列是对象的名称。当我运行宏时,它会通过一个命名列表运行一个 For 循环,并将在另一个工作表上的日历中填充项目。只要我有固定长度的命名列表(即 $L2:$A14),宏就可以正常工作,所以如果我添加新数据,我需要修复命名列表。

Sub UpdateCalendar()
    i = 2
    Dim strRngName As String
    lngLast = Sheets("Servers").Range("B" & Rows.Count).End(xlUp).Row
    For Each c In Application.Range("ScheduledDates")
        strRngName = c.Text
        strUser = c.Offset(0, -1).Value
        User = c.Offset(0, -10).Value
        If (i > 45) Then
        <code stuff>
        i = i + 1
    Next
End Sub

我尝试将第 5 行换成这样的:

For Each c In Sheets("Servers").Range("L" & Rows.Count).End(x1Up).Row

但它不喜欢那样(我猜它不认为它是一个完整的数组?)。执行方式的问题是,如果“ScheduledDates”字段为空,它将引发错误并停止脚本,因此我在命名列表中使用了固定长度。不知道有没有办法解决这个问题。

【问题讨论】:

  • For Each c In Sheets("Servers").Range("L" &amp; Rows.Count).End(x1Up).Row 你有一个错字x1Up 而不是xlUp

标签: vba excel


【解决方案1】:

首先,dim c as range,然后将您的代码更新为:

For Each c In Sheets("Servers").Range("L2:L" & Sheets("Servers").cells(Rows.Count,"L").End(xlUp).Row).cells

dim c as range, lLastRow as long
lLastRow=Sheets("Servers").cells(Rows.Count,"L").End(xlUp).Row

For Each c In Sheets("Servers").Range("L2:L" & lLastRow).cells

您还可以使用=offset( / counta 结构或通过引用listObject 来更新命名范围的定义,使其成为动态命名范围

【讨论】:

    【解决方案2】:

    假设 B 列总是有一个条目,我更喜欢这种方法:

    Sub UpdateCalendar()
        Dim rng as Range
        Dim strRngName As String
    
        Set rng as Sheets("Servers").Range("B2")
    
        While rng <> ""
            strRngName = rng.Text
            strUser = rng.Offset(0, -1).Value
    
            '!!!Below line will cause an error in your code as B2 offset by -10 would be B-8!!!
            User = rng.Offset(0, -10).Value
    
            If (rng.Row > 45) Then
            '<code stuff>
    
            Set rng = rng.Offset(1)
        Wend
    End Sub
    

    【讨论】:

      【解决方案3】:

      您可以通过使命名范围动态化来使用您的原始代码。

      例如,在命名区域的“引用到”字段中输入以下公式将从 A2:C 中选择一个区域,其中是最后填充行的行号。

      =OFFSET(Sheet1!$A$1,1,0,COUNTA(Sheet1!$A:$A)-1,3)

      (假设数据从 col A 扩展到 col C,标题在 row1)

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多