我的电子表格通过单击按钮隐藏并显示多行。由于电子表格受密码保护,任何宏都应该应用密码,然后运行hide / show并最终再次设置密码。这就是它的样子。
Sub Macro1()
ActiveSheet.Unprotect Password:="abc"
Rows("12:16").EntireRow.Hidden = True
ActiveSheet.Protect Password:="abc"
End Sub
Sub Macro2()
ActiveSheet.Unprotect Password:="abc"
Rows("12:16").EntireRow.Hidden = False
ActiveSheet.Protect Password:="abc"
End Sub
Sub Macro3()
ActiveSheet.Unprotect Password:="abc"
Rows("20:24").EntireRow.Hidden = True
ActiveSheet.Protect Password:="abc"
End Sub
Sub Macro4()
ActiveSheet.Unprotect Password:="abc"
Rows("20:24").EntireRow.Hidden = False
ActiveSheet.Protect Password:="abc"
End Sub
脚本工作正常,但我有16个部分需要32个宏。它仍然可以正常工作,但我想知道是否会有一个更简单的方法,只需要1行申请和1x用于设置密码。
感谢您的评论。
丹尼斯 荷兰
答案 0 :(得分:1)
Sub Macro1
HideIt Rows("12:16"), True
End Sub
Sub Macro2()
HideIt Rows("12:16"), False
End Sub
Sub HideRows(rng As Range, HideIt as Boolean)
ActiveSheet.Unprotect Password:="abc"
rng.EntireRow.Hidden = HideIt
ActiveSheet.Protect Password:="abc"
End Sub
如果您可以使用能够将名称转换为范围和true / False的内容命名您的按钮,您可以将它们全部链接到单个Sub并使用Application.Caller获取调用按钮的名称和从中提取参数。
修改强>
好的,这是一个非常简单的例子:添加两个"表格"按钮到您的工作表并命名一个" btn_12_5_H"和另一个" btn_12_5_S"。
以下是每个按钮的命名方式:
将两个按钮链接到下面的Sub(右键单击按钮>>分配宏):
Sub ShowHideRows()
Dim arr
'split the calling button name into an array
' (array will be zero-based)
arr = Split(Application.Caller, "_")
'**EDIT** check array is expected size...
If UBound(arr) <> 3 Then Exit Sub
If IsNumeric(arr(1)) and IsNumeric(arr(2)) Then
With Me 'if the code is in the sheet module, else "ActiveSheet"
.Unprotect Password:="abc"
'arr(1) determines start row
'arr(2) determines # of rows
'arr(3) determines if rows are hidden or not
.Cells(arr(1), 1).Resize(arr(2), 1).EntireRow.Hidden = (arr(3) = "H")
.Protect Password:="abc"
End With
End If
End Sub
修改#2:强>
为了完整起见,请注意您还可以直接向OnAction
添加参数(即右键单击按钮时选择&#34;分配宏&#34;)
例如,您可以使用以下内容:
Book1!'ShowHideRows2 12,TRUE'
注意在整个事情周围使用单引号。被调用的子可能看起来像(非常基本的例子来证明参数被正确传递):
Sub ShowHideRows2(rownum, HideIt)
Debug.Print rownum, HideIt
End Sub
请注意,因为Sub有参数,它不会出现在&#34;分配宏&#34;列表,你必须输入。