【问题标题】:if range is Nothing Exit sub, userform, specialcells如果范围是 Nothing 退出 sub、userform、specialcells
【发布时间】:2020-04-12 07:37:02
【问题描述】:

目标:搜索包含错误的单元格范围,如果发现一个无模式的用户表单,并允许您将销售更改为“是”、“否”或“稍后查看”。如果在范围内没有发现有错误的单元格,msgbox 会显示让您知道,隐藏用户窗体并退出子。

问题:我无法让 If range is nothing 隐藏用户窗体并退出 sub 以正常工作。每当我到达处理所有单元格错误的地步时,我都会在“未找到单元格”范围内收到 1004 错误。

Sub UserformYes_no_review()
Dim Custchk As CustomListCheck
Set Custchk = VBA.UserForms.Add(CustomListCheck.Name)

With New CustomListCheck
    Set CheckRange = Sheets("Sheet1").Range("A1:N2000").SpecialCells(xlCellTypeFormulas, xlErrors)
    If CheckRange Is Nothing Then
      MsgBox "All items have been accounted for"
      CustomListCheck.Hide
      Exit Sub
    Else
        For Each Cell In CheckRange
            Cell.Select
            If VarType(ActiveCell.Value) = vbError Then
                Custchk.Show vbModeless
            End If

        Next Cell
    End If
End With

End Sub

Private Sub CommandButton1_Click()
ActiveCell.Value = "Yes"
Call UserformYes_no
End Sub

Private Sub CommandButton2_Click()
ActiveCell.Value = "No"
Call UserformYes_no  
End Sub

Private Sub CommandButton3_Click()
ActiveCell.Value = "Review Later"
Call UserformYes_no
End Sub

我浏览了大量 Stackoverflow 页面并尝试了所有我能找到的解决方案,但没有任何效果。 作为旁注,我在 msgbox 上使用了用户表单,因为我需要它是无模式的。

【问题讨论】:

  • 谢谢,@siddharth_Rout 我已经用上述错误处理填充了 Set Check Range 行,这让我通过了收到的 1004 错误。现在我在“If CheckRange Is Nothing Then”上收到 424 错误“object required”。你的意思是用这个来填充整个宏吗?

标签: excel vba if-statement special-characters userform


【解决方案1】:

当您使用 SpecialCells 时,请使用错误处理。

改变

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

On Error Resume Next
Set CheckRange = Sheets("Sheet1").Range("A1:N2000").SpecialCells(xlCellTypeFormulas, xlErrors)
On Error GoTo 0

【讨论】:

  • 我已经用上面的错误处理填充了 Set Check Range 行,这让我通过了收到的 1004 错误。现在我在“If CheckRange Is Nothing Then”上收到 424 错误“object required”。
  • 当我用 On Error Resume Next 和 On Error GoTo 0 填充整个宏时,它让我无错误地通过宏,但用户窗体并没有按应有的方式隐藏。
  • 我认为由于下一个错误恢复,您永远不会实例化 'CheckRange' -- 尝试将“Set CheckRange = Nothing”添加到您的声明中
  • @ryanb。这是对悉达多建议的必要补充。此添加使代码按预期工作,但我的用户窗体未按计划隐藏。以前也这样做过,所以您的帮助并没有导致这个问题。
  • @RyanS:快速提问为什么你没有在Sub UserformYes_no_review() 中声明CheckRange?例如Dim CheckRange As Range。这样您就不需要将其设置为Nothing
【解决方案2】:

这解决了问题。仍然存在用户表单不会隐藏的问题,但我会为此发布另一个问题。

Sub UserformYes_no_review()
Dim Custchk As CustomListCheck
Set Custchk = VBA.UserForms.Add(CustomListCheck.Name)
Set CheckRange = Nothing



With New CustomListCheck
On Error Resume Next
    Set CheckRange = Sheets("Sheet1").Range("A1:N2000").SpecialCells(xlCellTypeFormulas, xlErrors)
On Error GoTo 0


    If CheckRange Is Nothing Then
      MsgBox "All items have been accounted for"
      CustomListCheck.Hide
      Exit Sub
    Else
        For Each Cell In CheckRange
            Cell.Select
            If VarType(ActiveCell.Value) = vbError Then
                Custchk.Show vbModeless
            End If

        Next Cell
    End If
End With


End Sub

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2020-01-06
    • 2014-03-04
    • 1970-01-01
    • 2020-04-01
    相关资源
    最近更新 更多