嗨我有一个复选框和代码,如果我运行它显示错误。请纠正此错误。
Private Sub CheckBox1_Click()
With Sheets("bom")
If .CheckBox1.Value = True Then
.Range("show_all_level") = "Yes"
Else
.Range("show_all_level") = "No"
End If
End With
End Sub
错误类型:
答案 0 :(得分:1)
尝试下面的代码,它应该处理您可能使用" show_all_level" Name Range
。
Option Explicit
Private Sub CheckBox1_Click()
Dim Nm As Name
Dim NmExist As Boolean
Dim NameRng As Range
' loop through all Name Ranges in ThisWorkbook
For Each Nm In ThisWorkbook.Names
If Nm.Parent.Name Like "bom" Then '<-- check if name range parent (Sheet.Name) is "bom"
MsgBox Nm.Name & " Name Range exists is sheet " & Chr(34) & Nm.Parent.Name & Chr(34)
NmExist = True ' raise the flag >> Name exist in "bom" sheet
Set NameRng = Nm.RefersToRange ' set the Range to the Name Range
Exit For
ElseIf Nm.Parent.CodeName Like "ThisWorkbook" Then '<-- check if name scope is "ThisWorkbook"
MsgBox Nm.Name & " Name Range exists as WorkBook scope"
NmExist = True ' raise the flag >> Name exist in Workbook scope
Set NameRng = Nm.RefersToRange ' set the Range to the Name Range
Exit For
End If
Next Nm
' verify that "show_all_level" name exist in "bom" sheet (or Workbook scope)
If Not NmExist Then
MsgBox Chr(34) & "show_all_level" & Chr(34) & "Name Range, doesn't exist in the desired sheet", vbCritical
Exit Sub
End If
With Sheets("bom")
If .CheckBox1.Value = True Then
NameRng.Value = "Yes"
Else
NameRng.Value = "No"
End If
End With
End Sub