与msgbox相互嵌套

问题描述 投票:0回答:1

目标:搜索工作簿中每个工作表的每个单元格,看是否有错误。如果出现错误,则会弹出一个msgbox,使您能够将单元格从错误更改为“是”或“否”。

问题:而不是循环遍历工作表,而是第二次循环遍历同一工作表上的单元。我尝试将最终的End If移至Next Sht之后,但出现了编译错误“ Next Without For”。

我还从其他阅读中知道,在下一个单元格中使用单元格引用不是很好,并且意识到这可能是问题所在,但我不确定如何更正它。

Sub test()
On Error Resume Next
Dim rng As Range
Dim rngError As Range
Dim Sht As Worksheet

Set Sht = Sheets("Sheet1")
Set rng = Sht.Range("A1:N2000")
Set rngError = rng.SpecialCells(xlCellTypeFormulas, xlErrors)

For Each Sht In ActiveWorkbook.Worksheets

    If Not rngError Is Nothing Then
        For Each Cell In rngError
            Answer = MsgBox("message in the box", vbQuestion + vbYesNo + vbDefaultButton2, "Name Change Check")
                If Answer = vbYes Then
                      Range(Cell.Address) = "Yes"
                Else
                      Range(Cell.Address) = "No"
                End If
        Next Cell
    End If

Next Sht

End Sub

作为旁注,下面的代码部分可以完美地发挥自己的作用。只有当我添加了嵌套循环时,它才被淘汰。

If Not rngError Is Nothing Then
    For Each Cell In rngError
        Answer = MsgBox("message in the box", vbQuestion + vbYesNo + vbDefaultButton2, "Name Change Check")
            If Answer = vbYes Then
                  Range(Cell.Address) = "Yes"
            Else
                  Range(Cell.Address) = "No"
            End If
    Next Cell
excel vba foreach nested-loops
1个回答
0
投票

尝试一下-

Sub test()
On Error Resume Next
Dim rng As Range
Dim rngError As Range
Dim Sht As Worksheet

Set Sht = Sheets("Sheet2")
Set rng = Sht.Range("A1:N2000")

GoTo lable

lable:
Set rngError = rng.SpecialCells(xlCellTypeFormulas, xlErrors)

For Each Sht In ActiveWorkbook.Worksheets

    If (Not rngError Is Nothing) Then
      If rngError <> "Yes" And rngError <> "No" Then
        For Each Cell In rngError
            Answer = MsgBox("message in the box", vbQuestion + vbYesNo + vbDefaultButton2, "Name Change Check")
                If Answer = vbYes Then
                      Range(Cell.Address) = "Yes"
                Else
                      Range(Cell.Address) = "No"
                End If
                rngError = Nothing
        GoTo lable
        Next Cell
          End If
    End If

Next Sht

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.