【问题标题】:for each loop in excel macros vba jumping alternate rows对于excel宏vba中的每个循环跳跃交替行
【发布时间】:2013-01-22 19:23:47
【问题描述】:

我在 vba 中有以下代码。 sheet5 中从 a5 到 a20 列的行是:

a5=瑞典

a6=西班牙

a7=俄罗斯

a8=意大利

a9=德国

a10=芬兰

a11=挪威

a12=瑞士

a13=法国

a14=比利时

Set fillcolumnrange = Sheet5.Range("A5:A20")
i = 1
For Each Row In fillcolumnrange.Rows
 If Not Sheet5.Range("A" & i + 4) = "" Then
    MsgBox Row(i)
 End If
 i = i + 1
Next Row

但此代码仅提示替代值,即。

瑞典

俄罗斯

德国

挪威

法国

谁能帮我找出代码中的错误

【问题讨论】:

    标签: excel visual-studio-macros vba


    【解决方案1】:

    您正在遍历范围内的行,并在循环中推进变量i。 您可以引用正在循环的每个变量。

    试试这个

    Set fillcolumnrange = Sheet1.Range("A5:A20")
    For Each cell In fillcolumnrange.Cells
     If Not cell = "" Then
        MsgBox cell
     End If
    Next cell
    

    【讨论】:

    • 很好 - 你打败了我。 ;)
    【解决方案2】:

    您混合了不同类型的循环。

    按照瑞克说的做。

    或者使用i:

    Set fillcolumnrange = Sheet5.Range("A5:A20")
    For i = 1 To fillcolumnrange.Rows.Count
        If Not Sheet5.Range("A" & i + 4) = "" Then
           MsgBox Sheet5.Cells(i + 4, 1)
        End If
    Next i
    

    或者do-Loop

    Set fillcolumnrange = Sheet5.Range("A5:A20")
    i = 1
    do until i = fillcolumnrange.Rows.Count + 4
     If Not Sheet5.Range("A" & i + 4) = "" Then
        MsgBox Sheet5.Cells(i + 4, 1)
     End If
     i=i+1
    Loop
    

    EDIT现已测试,似乎运行正常)

    【讨论】:

    • 在“For i = 1 to fillcolumnrange.Rows”行显示类型不匹配
    【解决方案3】:

    基于 Rick 的回答,这里是 For Each 循环的简短版本:

    对于 fillcolumnrange.Cells 中的每个单元格 If len(cell) 0 Then MsgBox cell 下一个

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 1970-01-01
      • 2014-06-13
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多