【问题标题】:Excel VBA vbYesNo MsgBoxExcel VBA vbYesNo MsgBox
【发布时间】:2016-06-20 23:29:20
【问题描述】:

我可以就 vbYesNo MsgBox 的语法获得一些帮助吗? 我现在有这个,

For i = 1 To 10
    If Not (cells(i,1).value = "0" OR cells(i,1).value = "30") Then
        Range(cells(i, 1), cells(i, 1).End(xlToRight)).Select
        ans = MsgBox("Do you want to delete this row?", vbYesNo)
        If ans = vbYes Then
            'I do something
        Else
            'I want to exit this the If and continue on the For loop
            Exit If
        End If
    End If
Next i

我尝试了 End If 和 Exit If 但不起作用。我能得到一些帮助吗?

【问题讨论】:

  • 您是否尝试过 Exit For 而不是 Exit If?
  • 这将有助于查看您在哪里以及如何分配 ans.........
  • 为什么不直接做End IF?您不必总是将ElseIf 语句放在一起。但请注意,您的循环将不会提示用户 10 次答案。他们被问过一次(在循环之前),基于此,循环要么做事,要么完全跳过。
  • 哇哦,你的问题与vbYesNo/MsgBox 完全无关。我建议您将您的实际工作代码 交给Code Review... 看起来您在这里所做的事情效率极低。例如为什么ans 不是vbYes 时还要循环一次?
  • @Mat's Mug:对不起,如果我的标题不清楚。这是我所拥有的一个简单版本,我的循环中有一个嵌套的 If 条件,所以即使它的 vbNo 我仍然需要遍历整个循环。

标签: excel vba


【解决方案1】:
For i = 1 To 10
    If ans = vbYes Then
        'Do whatever
    End If
Next i

如果您省略了Else,如果不满足If 子句,它将继续下一步。

编辑: 当您在循环中删除行时,您应该始终反向循环。我还做了一些其他的调整。见下文:

For i = 10 To 1 Step -1
    If Not (cells(i,1).value = "0" OR cells(i,1).value = "30") Then
        ans = MsgBox("Do you want to delete row " & Left(cells(i,1).Address(False,False),1) & "?", vbYesNo)
        If ans = vbYes Then
            Cells(i,1).EntireRow.Delete
        End If
    End If
Next i

【讨论】:

  • 谢谢凯尔,我应该反向循环有什么特别的原因吗?我现在有我的 msgbox 和循环工作,但似乎还有另一个问题。每次我删除一行时,我都会将其向上移动,这样就不会有一行空单元格。即使我做了类似 i=i-1 的操作,循环也会在最后检查另一行
  • 您总是反向循环,因为当您删除一行时,所有其他行都会上移一位。因此,如果您删除第 2 行,第 3 行将变为第 2 行,但您的循环将转到第 3 行,这意味着您从未检查过并且可能删除了原始工作表中的第 3 行。
【解决方案2】:

要删除行,我建议创建一个变量,然后使用范围的行并删除它。在开始添加 Dim myRng as Range 然后用

替换你的 .Select

Set myRng = Range(cells(i, 1), cells(i, 1).End(xlToRight))

然后在你的“如果是”中,

myRng.EntireRow.Delete

然后完全删除Else

注意:我认为您的范围应该可以工作,但我不确定第二个 cells(),所以如果它给您带来问题,请告诉我。

【讨论】:

  • 感谢@BruceWayne,我得到了它的工作,但仍需要一些调整
  • @Bubs - 你最后得到了什么?介意编辑到您的 OP 中吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多