Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使Excel中的VBA代码更高效地显示和隐藏行?_Vba_Excel - Fatal编程技术网

使Excel中的VBA代码更高效地显示和隐藏行?

使Excel中的VBA代码更高效地显示和隐藏行?,vba,excel,Vba,Excel,我有一张带有复选框的工作表,还有很多其他工作表,我想根据复选框值显示和隐藏行 我是这样开始的 If InStr(1, ActiveSheet.Range("chkOne").Value, "o") Then ActiveWorkbook.Sheets("Phone").Range("OneShowHideRows").EntireRow.Hidden = True Else ActiveWorkbook.Sheets("Phone").Range("OneShow

我有一张带有复选框的工作表,还有很多其他工作表,我想根据复选框值显示和隐藏行

我是这样开始的

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 

什么也没发生。

您至少可以通过编写以下内容来减少代码

With ActiveWorkbook.Sheets("TES integrationer").Range("HermesShowHideRows").EntireRow.Hidden = (InStr(.Range("chkHermes").Value, "o") > 0)
End With
with ActiveWorkbook
    .Sheets("Phone").Range("OneShowHideRows").EntireRow.Hidden = (InStr(.Range("chkOne").Value, "o") > 0)
    '...
end with

您可以使用包含按钮引用的和数组,以及另一个包含行引用的和数组

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

这样可以大大减少代码量。

什么是“不工作”?请解释发生了什么,否则我们无法帮助您。更新了我的答案。您的
activesheet
与sheet
电话
是不同的工作表?在这种情况下,您必须使用`。。。InStr(Activesheet.Range(“chkOne”).Value,“o”)…'是的,复选框和行在不同的表中。它看起来与我写的内容类似,但不起作用,ActiveWorkbook.Sheets(“phone”).Range(“ShowHideRows”).EntireRow.Hidden=(InStr(ActiveSheet.Range(“chkOne”).Value,“o”)>0)以hmm结尾。除非你的名字有什么问题,否则我想不出这不起作用的原因。你的原始代码完成了任务?顺便说一句:您的代码中没有关于错误恢复下一步的
语句吗?