在Excel中制作VBA代码以更有效地显示和隐藏行?

时间:2018-01-26 12:27:11

标签: excel vba excel-vba

我有一张带有复选框的工作表,我想要显示许多其他工作表,并根据复选框值隐藏行。

我是这样开始的

If InStr(1, ActiveSheet.Range("chkOne").Value, "o") Then
    ActiveWorkbook.Sheets("Phone").Range("OneShowHideRows").EntireRow.Hidden = True
        Else
    ActiveWorkbook.Sheets("Phone").Range("OneShowHideRows").EntireRow.Hidden = False
End If

If InStr(1, ActiveSheet.Range("chkPhone").Value, "o") Then
    ActiveWorkbook.Sheets("Phone").Range("SamsungShowHideRows").EntireRow.Hidden = True
        Else
    ActiveWorkbook.Sheets("Phone").Range("SamsungShowHideRows").EntireRow.Hidden = False
End If

    If InStr(1, ActiveSheet.Range("chkPhone").Value, "o") Then
    ActiveWorkbook.Sheets("Phone").Range("GoogleShowHideRows").EntireRow.Hidden = True
        Else
    ActiveWorkbook.Sheets("Phone").Range("GoogleShowHideRows").EntireRow.Hidden = False
End If

这样做很好,但感觉就像我自己反复,我会这样做20次。有更有效的方法吗?选择案例?

第一行是复选框。 第二行或第四行描述了我想要显示和隐藏的表格和行(我已经命名了我的行)。

修改 FunThomas解决方案存在问题。

With ActiveWorkbook
.Sheets("TES integrationer").Range("HermesShowHideRows").EntireRow.Hidden = (InStr(.Range("chkHermes").Value, "o") > 0)
End With

什么都没发生。

With ActiveWorkbook.Sheets("TES integrationer").Range("HermesShowHideRows").EntireRow.Hidden = (InStr(.Range("chkHermes").Value, "o") > 0)
End With

最后一个.Range上的无效或不合格的引用。将最后一个范围更改为

With ActiveWorkbook.Sheets("TES integrationer").Range("HermesShowHideRows").EntireRow.Hidden = (InStr(ActiveSheet.Range("chkHermes").Value, "o") > 0)
End With 

什么都没发生。

2 个答案:

答案 0 :(得分:1)

您可以通过编写类似

的内容来减少代码
with ActiveWorkbook
    .Sheets("Phone").Range("OneShowHideRows").EntireRow.Hidden = (InStr(.Range("chkOne").Value, "o") > 0)
    '...
end with

答案 1 :(得分:0)

你可以拥有包含Button Reference的数组和带有Rows Reference

的数组
ButtonRef = Array("chkOne", "chkTwo", "chkPhone", "ButtonRangeOrName")
RowsRef = Array("OneShowHideRows", "SamsungShowHideRows", "GoogleShowHideRows", "RowsNameOrRange")

For n = 0 To ButtonRef
    If InStr(1, ActiveSheet.Range(ButtonRef(n)).value, "o") Then
        ActiveWorkbook.Sheets("Phone").Range(RowsRef(n)).EntireRow.Hidden = True
    Else
        ActiveWorkbook.Sheets("Phone").Range(RowsRef(n)).EntireRow.Hidden = False
    End If
Next

这种方式将大大减少代码量。