使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结尾。除非你的名字有什么问题,否则我想不出这不起作用的原因。你的原始代码完成了任务?顺便说一句:您的代码中没有关于错误恢复下一步的语句吗?