如果范围是 Nothing 退出 sub、userform、specialcells
if range is Nothing Exit sub, userform, specialcells
目标:搜索包含错误的单元格范围,如果发现无模式用户窗体显示并允许您将卖出更改为 "yes"、"no" 或 "Review later"。如果在范围内没有发现有错误的单元格,msgbox 会出现让你知道,隐藏用户窗体并退出子。
问题:我无法使 If range is nothing hide userform and exit sub 正常工作。每当我到达处理所有单元格错误的位置时,我都会在 "no cells were found" 范围内收到 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
我浏览了大量的 Whosebug 页面并尝试了所有我能找到的解决方案,但没有任何效果。
作为旁注,我在 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
这解决了问题。仍然存在用户窗体不会隐藏的问题,但我会 post 对此提出另一个问题。
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
目标:搜索包含错误的单元格范围,如果发现无模式用户窗体显示并允许您将卖出更改为 "yes"、"no" 或 "Review later"。如果在范围内没有发现有错误的单元格,msgbox 会出现让你知道,隐藏用户窗体并退出子。
问题:我无法使 If range is nothing hide userform and exit sub 正常工作。每当我到达处理所有单元格错误的位置时,我都会在 "no cells were found" 范围内收到 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
我浏览了大量的 Whosebug 页面并尝试了所有我能找到的解决方案,但没有任何效果。 作为旁注,我在 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
这解决了问题。仍然存在用户窗体不会隐藏的问题,但我会 post 对此提出另一个问题。
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