在IF中优化VBA,包括AND语句

时间:2017-05-25 17:17:39

标签: vba ms-word word-vba

我想知道是否有办法优化这组代码

 Sub BBG_Transmital()
 'Hides Sections Not Used in Expanded Form
     Dim CollapseRange1 As Range
     Dim CollapseRange2 As Range
     'Set Which Range/Cell to Associate with Marked CheckBox
     With ActiveDocument.Tables(3)
    Set CollapseRange1 = .Rows(10).Range
         CollapseRange1.End = .Rows(13).Range.End
     End With
     With ActiveDocument.Tables(3)
     Set CollapseRange2 = .Rows(16).Range
         CollapseRange2.End = .Rows(21).Range.End
     End With

    'If Box is Checked then CollapseRanges
     If CheckBox1.Value = True Then
        CollapseRange1.Font.Hidden = True
    'If Box is Not Checked then UncollapseRange
    Else
        CollapseRange1.Font.Hidden = False
    End If
    'If Box is Checked then CollapseRanges
    If CheckBox1.Value = True Then
        CollapseRange2.Font.Hidden = True
    'If Box is Not Checked then UncollapseRange
   Else
        CollapseRange2.Font.Hidden = False
    End If

End Sub

我尝试使用

If CheckBox1.Value = True Then
    CollapseRange1.Font.Hidden = True AND CollapseRange2.Font.Hidden = True
Else 
    CollapseRange1.Font.Hidden = False And CollapseRange2.Font.Hidden = False

但它没有用。我只是想知道我是否可以将我的IF语句缩短为一个而不是两个。

谢谢!

2 个答案:

答案 0 :(得分:3)

这是您的相同代码......只是为了删除不必要的检查而压缩

 Sub BBG_Transmital()
    'Hides Sections Not Used in Expanded Form
     Dim CollapseRange1 As Range
     Dim CollapseRange2 As Range

     'Set Which Range/Cell to Associate with Marked CheckBox
    With ActiveDocument.Tables(3)
        Set CollapseRange1 = .rows(10).Range
        CollapseRange1.End = .rows(13).Range.End
        Set CollapseRange2 = .rows(16).Range
        CollapseRange2.End = .rows(21).Range.End
    End With

    'If Box is Checked then CollapseRanges
    If CheckBox1.Value = True Then
        CollapseRange1.Font.Hidden = True
        CollapseRange2.Font.Hidden = True

    Else    'If Box is Not Checked then UncollapseRange
        CollapseRange1.Font.Hidden = False
        CollapseRange2.Font.Hidden = False
    End If

End Sub

答案 1 :(得分:2)

进一步凝结Wayne's answer

这部分:

'If Box is Checked then CollapseRanges
If CheckBox1.Value = True Then
    CollapseRange1.Font.Hidden = True
    CollapseRange2.Font.Hidden = True

Else    'If Box is Not Checked then UncollapseRange
    CollapseRange1.Font.Hidden = False
    CollapseRange2.Font.Hidden = False
End If

可以写成:

CollapseRange1.Font.Hidden = CheckBox1.Value
CollapseRange2.Font.Hidden = CheckBox1.Value

另请注意,If {boolean-expression} = True始终可以重写为If {boolean-expression}If {boolean-expression} = False始终可以重写为If Not {boolean-expression}