Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 循环遍历数组数值_Arrays_Vba_Loops - Fatal编程技术网

Arrays 循环遍历数组数值

Arrays 循环遍历数组数值,arrays,vba,loops,Arrays,Vba,Loops,代码在第一个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

代码在第一个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
Private子工作表\u selection更改(ByVal目标作为范围)
Dim i为长,myarray为变体
myarray=Array(122123)
对于i=LBound(myarray)到UBound(myarray)
如果范围(“O”&i)为0,则
回答=MsgBox(“价格变化,你确定吗?”,vbYesNo)
如果结束
如果答案=vbNo,则
Range(“F”和i).Formula=“=IFERROR(VLOOKUP($B“&i&”,eac\u设备列表!$P:$S,2,FALSE),“”)
如果结束
如果答案=是,则
范围(“O”和“i)=“0”
如果结束
接下来我
端接头

以下是一些需要考虑的事项:

  • 确保
    SelectionChange
    仅涉及一个单元格,因为您的代码未设置为处理多个单元格
  • 您不需要3条独立的
    IF
    语句。这已从3个
    IF
    语句减少到2个(其中使用
    ElseIf
  • 如注释中所述,
    i
    只显示数组的索引。如果需要索引的值,则需要使用
    myarray(i)
  • 选项Explicit
    添加到代码顶部。需要声明变量
    answer

  • 选项显式
    专用子工作表\u选择更改(ByVal目标作为范围)
    Dim i为长,myarray为变量,应答为变量
    如果Target.Count>1,则退出Sub
    myarray=Array(122123)
    对于i=LBound(myarray)到UBound(myarray)
    如果范围(“O”和myarray(i))为0,则
    回答=MsgBox(“价格变化,你确定吗?”,vbYesNo)
    如果答案=vbNo,则
    范围(“F”和myarray(i))。公式=“=IFERROR(VLOOKUP($B”)和myarray(i)和”,eac_设备列表!$P:$S,2,FALSE),“”)
    ElseIf answer=vbYes然后
    范围(“O”和myarray(i))=0
    如果结束
    如果结束
    接下来我
    端接头
    
    LBound(myArray)
    为0。所以
    Range(“O”&i)
    变成
    Range(“O”&0)
    ,这不是一个有效的地址。
    Range(“O”&myarray(i))
    urdearboy,谢谢你的评论!它起作用了!
    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