我需要第二双眼睛,我无法让这段代码正常运行。我想要做的代码是,如果按下“复选框47”然后根据单元格E43的值隐藏不同的行,但如果没有按下该复选框,则无论如何隐藏行45:55细胞E43的值是。我得到了代码的第一部分,可以完美地运行,但是当取消选中复选框时,它不会隐藏行。这是代码
Sub Toggle_Rows_Deisel()
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("NSR FORM")
If Sheet.Shapes("Check Box 47").OLEFormat.Object.Value = 1 Then
Select Case CStr(Sheet.Range("E43").Value2)
Case "1"
Sheet.Rows("45:55").Hidden = True
Sheet.Rows("43:44").Hidden = False
Case "2"
Sheet.Rows("47:55").Hidden = True
Sheet.Rows("43:46").Hidden = False
Case "3"
Sheet.Rows("49:55").Hidden = True
Sheet.Rows("43:48").Hidden = False
Case "4"
Sheet.Rows("51:55").Hidden = True
Sheet.Rows("43:50").Hidden = False
Case "5"
Sheet.Rows("53:55").Hidden = True
Sheet.Rows("43:52").Hidden = False
Case "6"
Sheet.Rows("55:55").Hidden = True
Sheet.Rows("43:54").Hidden = False
Case "7"
Sheet.Rows("43:55").Hidden = False
Case Else
End Select
Else
Sheet.Rows("45:55").Hidden = True
Sheet.Rows("43:44").Hidden = False
End If
End Sub
答案 0 :(得分:0)
变化:
If Sheet.Shapes("Check Box 47").OLEFormat.Object.Value = 1 Then
进入
If Sheet.Shapes("Check Box 47").OLEFormat.Object.Value = True Then
但是,请不要问为什么,我只是坚持这一点并且有效。
编辑在我阅读了一些评论之后,在我分析了@Menelaos的链接之后,我感到非常非常惊讶(有人接受了我的计算机上从未满足条件的答案)。这似乎是非常令人困惑的事情。因此我做了一些测试:新工作表中有一个简单的OLEObject ComboBox。我检查了2007年和2007年的价值观。 2010年(结果发现相同)。这是代码和结果注释。我希望它会有所帮助。
Private Sub CheckBox1_Click()
With Sheet1.OLEObjects(1).Object
'1st type
If .Value = 1 Then
MsgBox "1st Checked: " & .Value
Else
'2007>Checked >.Value =True
'2007>UnChecked >.Value =False
'2010>Checked >.Value =True
'2010>UnChecked >.Value =False
MsgBox "1st UnChecked: " & .Value
End If
'2nd type
If .Value = True Then
'2007>Checked >.Value =True
'2010>Checked >.Value =False
MsgBox "2nd Checked: " & .Value
Else
'2007>UnChecked >.Value =False
'2010>UnChecked >.Value =False
MsgBox "2nd UnChecked: " & .Value
End If
'3rd
If .Value = -1 Then
'2007>Checked >.Value =True
'2010>Checked >.Value =True
MsgBox "3rd -1: " & .Value
End If
If .Value = 0 Then
'2007>UnChecked >.Value =False
'2010>UnChecked >.Value =False
MsgBox "3rd 0: " & .Value
End If
If .Value = -4146 Then
MsgBox "3rd -4146: " & .Value
End If
End With
End Sub