0

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

1 回答 1

0

改变:

If Sheet.Shapes("Check Box 47").OLEFormat.Object.Value = 1 Then

进入

If Sheet.Shapes("Check Box 47").OLEFormat.Object.Value = True Then

但是,请不要问为什么,我只是坚持这一点,它的工作原理。

编辑在阅读了一些评论并分析了@Menelaos 的链接后,我非常非常惊讶(有人接受了从未满足我计算机条件的答案)。这似乎是一件非常令人困惑的事情。因此我做了一些测试:新工作表中的 1 个简单的 OLEObject ComboBox。我检查了 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
于 2013-04-09T22:23:44.383 回答