If-Then-Else语句未运行Else Statement

时间:2013-04-09 22:01:21

标签: excel vba excel-vba if-statement

我需要第二双眼睛,我无法让这段代码正常运行。我想要做的代码是,如果按下“复选框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

1 个答案:

答案 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