【问题标题】:loop through array number values循环遍历数组数值
【发布时间】:2018-10-31 18:22:11
【问题描述】:

代码在第一个 if 语句处中断。工作表范围错误。试图循环通过 myarray。 myarray 是一个整数数组。谢谢!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim i As Long, myarray As Variant

    myarray = Array(122, 123)

    For i = LBound(myarray) To UBound(myarray)
        If Range("O" & i) <> 0 Then
            answer = MsgBox("Price Change. Are you sure?", vbYesNo)
        End If

        If answer = vbNo Then
            Range("F" & i).Formula = "=IFERROR(VLOOKUP($B" & i & ",eac_equipment_list!$P:$S,2,FALSE),"""")"
        End If

        If answer = vbYes Then
            Range("O" & i) = "0"

        End If
    Next i
End Sub

【问题讨论】:

  • LBound(myArray) 为 0。所以Range("O" &amp; i) 变为 Range("O" &amp; 0),这不是一个有效的地址。
  • Range("O" &amp; myarray(i))
  • urdearboy,感谢您的评论!它有效!

标签: arrays vba loops


【解决方案1】:

这里有几点需要考虑:

  1. 确保SelectionChange 仅涉及一个单元格,因为您的代码未设置为处理多个单元格。
  2. 您不需要 3 个单独的 IF 语句。这已从 3 个 IF 语句减少到 2 个(其中一个使用 ElseIf
  3. 正如 cmets 中所讨论的,i 仅显示数组的索引。如果要索引的值,需要使用myarray(i)
  4. Option Explicit 添加到代码顶部。你的变量answer 需要声明

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Long, myarray As Variant, answer As Variant

If Target.Count > 1 Then Exit Sub

myarray = Array(122, 123)

For i = LBound(myarray) To UBound(myarray)
    If Range("O" & myarray(i)) <> 0 Then
        answer = MsgBox("Price Change. Are you sure?", vbYesNo)

        If answer = vbNo Then
            Range("F" & myarray(i)).Formula = "=IFERROR(VLOOKUP($B" & myarray(i) & ",eac_equipment_list!$P:$S,2,FALSE),"""")"
        ElseIf answer = vbYes Then
            Range("O" & myarray(i)) = 0
        End If

    End If
Next i

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2017-02-20
    相关资源
    最近更新 更多