繁体   English   中英

如果范围是什么退出子,用户窗体,特殊单元格

[英]if range is Nothing Exit sub, userform, specialcells

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

问题:我无法获得 If range is nothing hide userform 并退出 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 上使用了一个用户表单,因为我需要它是无模式的。

当您使用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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM