选中一个checkbox时,勾选常规select器和macros以显示下三行

我是macros的新手,所以我不确定在VBA中这是可能的。

我正在尝试创build一个文档,其中包含许多由4行组成的小型表格。 一行是标题,有一个checkbox,将始终显示,下面三行包含数据,我只有什么时候看到我select相关的checkbox。

这个文件将有许多迷你表,因此许多checkbox,我想知道是否有一个通用的select器checkbox,我可以应用相同的macros。

我已经看到下面的macros,但这只适用于一个checkbox,我想知道是否有一种方法来应用所有的checkbox,如果选中第4行checkbox,然后显示行5,6和7.如果选中第8行的checkbox,然后显示第9,10和11行等….

Private Sub CheckBoxRow4_Click() Rows("5:6:7").Hidden = CheckBoxRow4.Value End Sub 

看更好的想法截图。 Excel表格

如果您可以指出如何在打开文档时默认隐藏下面三行,这也是值得赞赏的。

如果这有什么区别,我正在使用Excel 2011 for Mac。

先谢谢你。

我相信会有几种方法。 我的第一个想法是添加checkbox,将它们全部链接到一个macros。 激活时,你必须做几件事情:

  1. 找出是谁调用的子(checkbox);

  2. 找出特定checkbox的位置(哪一行);

  3. 隐藏/取消隐藏下面的行。


1:

checkbox的名称很简单。 Application Caller者会给你的。

2:

位置是真正的问题在这里。 在这里我没有看到一个简单的解决scheme,除非给出checkbox这样的特定名称,否则清楚它是哪一行。如果添加checkbox,则可以在“命名范围”input字段中给出名称。 如果你给它的名字,将指定它必须隐藏的行,它甚至更好。 所以像这样: HIDE_4_7将表明该checkbox必须隐藏/取消隐藏行4到7。

3:

隐藏行现在很容易。


全方位的解决scheme:

 Sub HideRows() Dim cbName As String Dim cbValue As Boolean Dim s() As String Dim firstRow As Long Dim lastRow As Long On Error Resume Next cbName = Application.Caller If Err.Number <> 0 Then Exit Sub 'sub is not called from an application object cbValue = (ActiveSheet.CheckBoxes(cbName) = xlOn) If Err.Number <> 0 Then Exit Sub 'sub is not called from a checkbox On Error GoTo 0 s = Split(cbName, "_") If s(LBound(s)) <> "HIDE" Then Exit Sub 'name of the shape is not valid firstRow = Val(s(LBound(s) + 1)) lastRow = Val(s(LBound(s) + 2)) Sheets(1).Rows(firstRow & ":" & lastRow).Hidden = Not cbValue End Sub 

你将不得不调用checkboxHIDE_*firstrow*_*lastrow* ,并将其链接到这个子。 这在我身边。


编辑

要隐藏打开的所有行,可以使用Workbook_Open子(在工作簿代码存储中)。 像这样的东西:

 Private Sub Workbook_Open() Dim shp As Shape Dim s() As String Dim firstRow As Long Dim lastRow As Long Dim cbValue As Boolean For Each shp In Sheets(1).Shapes Debug.Print shp.Name s = Split(shp.Name, "_") If s(LBound(s)) <> "HIDE" Then GoTo nextShp 'set checkbox off: Sheets(1).CheckBoxes(shp.Name) = xlOff firstRow = Val(s(LBound(s) + 1)) lastRow = Val(s(LBound(s) + 2)) Sheets(1).Rows(firstRow & ":" & lastRow).Hidden = True nextShp: Next shp End Sub