【问题标题】:Excel VBA Looping rows does not work, Run-time error '1004'Excel VBA 循环行不起作用,运行时错误“1004”
【发布时间】:2017-11-08 13:55:34
【问题描述】:

我正在尝试创建一个循环,该循环遍历 excel 中选定范围内的行,并为每一行输出一个分数,但我得到这个错误指的是 for 循环中的第一行(设置 VARIABLE1)。如果我将 .Range("A") 替换为“A2”,那么我会得到一个输出,但自然只针对第一行。如何使代码循环每一行? 代码:

Dim rng As Range
Dim Final_risk_score
Set rng = Worksheets("sheet name").Range("A1:Z100")

For Each Row In rng.Rows
    VARIABLE1 = Worksheets("sheet name").Range("A")
    VARIABLE2 = Worksheets("sheet name").Range("K")
    VARIABLE3 = Worksheets("sheet name").Range("J")
    VARIABLE4 = Worksheets("sheet name").Range("W")
    VARIABLE5 = Worksheets("sheet name").Range("G")
    VARIABLE6 = Worksheets("sheet name").Range("N")
    VARIABLE7 = Worksheets("sheet name").Range("X")
    VARIABLE8 = Worksheets("sheet name").Range("Y")
    VARIABLE9 = Worksheets("sheet2").Range("N7")

    Final_score = Score_calculations(VARIABLE1, VARIABLE2, VARIABLE3, VARIABLE4, VARIABLE5, VARIABLE6, VARIABLE7, VARIABLE8, VARIABLE9)
    Worksheets("sheet name").Range("Z").Value = Final_score
Next Row

【问题讨论】:

  • 什么是错误 1004?你试过什么?
  • A Range 需要的不仅仅是 "A" - 它需要像 "A1" 这样的东西
  • 感谢@ScottCraner 的回答!现在可以了!

标签: vba excel loops for-loop


【解决方案1】:

首先不要使用 Row 作为变量。使用类似Rw 的东西。

然后将.Range("A")改为:

 .Cells(Rw.Row,"A") 

对所有范围都这样做。该范围必须附加一行。

你也可以这样做:

 .Range("A" & Rw.Row) 

所以:

Dim Rw as Range
Dim rng As Range
Dim Final_risk_score
Set rng = Worksheets("sheet name").Range("A1:Z100")

For Each Rw In rng.Rows
    VARIABLE1 = Worksheets("sheet name").Cells(Rw.Row,"A")
    VARIABLE2 = Worksheets("sheet name").Cells(Rw.Row,"K")
    VARIABLE3 = Worksheets("sheet name").Cells(Rw.Row,"J")
    VARIABLE4 = Worksheets("sheet name").Cells(Rw.Row,"W")
    VARIABLE5 = Worksheets("sheet name").Cells(Rw.Row,"G")
    VARIABLE6 = Worksheets("sheet name").Cells(Rw.Row,"N")
    VARIABLE7 = Worksheets("sheet name").Cells(Rw.Row,"X")
    VARIABLE8 = Worksheets("sheet name").Cells(Rw.Row,"Y")
    VARIABLE9 = Worksheets("sheet2").Range("N7")

    Final_risk_score= Score_calculations(VARIABLE1, VARIABLE2, VARIABLE3, VARIABLE4, VARIABLE5, VARIABLE6, VARIABLE7, VARIABLE8, VARIABLE9)
    Worksheets("sheet name").Cells(Rw.Row,"Z").Value = Final_risk_score
Next Row

【讨论】:

    【解决方案2】:

    把循环改成这样:

    Dim myRow As Range
    For Each myRow In rng.Rows
        With Worksheets("sheet name")
    
            VARIABLE1 = .Range("A" & myRow.Row)
            VARIABLE2 = .Range("K" & myRow.Row)
            'etc
        End With
    Next Row
    

    因此,只要您正确引用 Range,它就会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多