我有一个excel按钮,当我点击它时会隐藏“S-U”列。我想第二次点击按钮,它会隐藏“P-R”等列。你可以每次点击操作一个excel按钮吗?
答案 0 :(得分:0)
解决此问题的一个方法是声明一个全局变量,并为其指定一个计数器:
Private i As Integer
Sub Button1_Click()
If i = 0 Then
Do Stuff 'This is the first click
i = i + 1
Else
Do Stuff the Second Time 'This is the second time and beyond.
i = i + 1
End If
End Sub
i
将自动分配值0.第一次检查i = 0
时,它会在第一次运行时运行。一旦设置i = i + 1
,它就会做第二次你想做的其他事情。如果你想第三次这样做,你可以随时做Else If i = 1 Then
等等。
在Visual Basic编辑器下,如果您还没有新模块,请创建一个新模块。创建一个按钮并将Button1_Click宏指定给Button。
答案 1 :(得分:0)
如果您只需要在两个选项之间切换,例如就像关闭开关一样,然后使用布尔值:
Public x As Boolean
Private Sub CommandButton1_Click()
If x Then MsgBox ("ON") Else MsgBox ("OFF")
x = Not x
End Sub
答案 2 :(得分:0)
如果您只想做一些事情(听起来像这样),我会让我的宏评估当前状态并采取相应措施。
在您的示例中,您指示首先要隐藏S-U,然后再次单击P-R。这样就可以了:
Sub HideColumns()
If Sheets("Sheet1").Range("S:S").EntireColumn.Hidden = False Then
Sheets("Sheet1").Range("S:U").EntireColumn.Hidden = True
Else
Sheets("Sheet1").Range("P:R").EntireColumn.Hidden = True
End If
End Sub
当然,您可以使用其他条件和操作进行扩展。例如更改按钮的文本以表示下一步将执行的操作:
假设你标有" Hide Rows S:U"首先,您可以在VBA中更改它以指示在下次单击时它将执行的操作:
Sub HideColumnsUpdateText()
If Sheets("Sheet1").Range("S:S").EntireColumn.Hidden = False Then
Sheets("Sheet1").Range("S:U").EntireColumn.Hidden = True
Sheets("Sheet1").Buttons("Button 1").Text = "Hide Rows P:R"
Else
Sheets("Sheet1").Range("P:R").EntireColumn.Hidden = True
End If
End Sub
一旦开始评估当前状态(使用ElseIf扩展,甚至使用Case),你可以做的事情真的无止境。你只需要保持逻辑直线。
编辑以进一步扩展: 如果您的情况是线性的 - 也就是说,如果想要以相同的顺序隐藏越来越多的列,您只需要执行其他ifs来评估情况,并逐步执行要隐藏它们的顺序。
个人提示:我发现"如果无论如何="语句比#34更容易理解;如果不是= false" (从技术上讲,你甚至不必输入" = True")。但这意味着你需要从最后的可能性开始,然后向后工作。否则你需要通过" = False评估" (就像我第一次演示的那样),但我发现它有点难以理解。您的结果可能会有所不
你表示你想要按顺序隐藏这些:" S:U"," P:R"," M:O"," Y:L"" G:I" 。这是一个脚本,一旦隐藏了所有这些行,按钮就会显示所有这些行。所以我首先评估最后一种可能性是否正确 - 这是行G:我已经隐藏了吗?如果是这样,那就告诉他们。我还包括更新按钮文字,但这是可选的。
Sub hideSetsOfColumnsProgressively()
' progressive order of button function: "S:U","P:R","M:O","J:L","G:I","Unhide Rows"
If Sheets("Sheet1").Range("G:I").EntireColumn.Hidden = True Then
Sheets("Sheet1").Range("G:U").EntireColumn.Hidden = False 'shows all rows
'optionally change the text of the button to indicate the next function:
Sheets("Sheet1").Buttons("Button 1").Text = "Hide Rows S:U"
ElseIf Sheets("Sheet1").Range("J:L").EntireColumn.Hidden = True Then
'then we've already hidden all of the other columns, so do the last set
Sheets("Sheet1").Range("G:I").EntireColumn.Hidden = True
Sheets("Sheet1").Buttons("Button 1").Text = "Unhide Rows"
ElseIf Sheets("Sheet1").Range("M:O").EntireColumn.Hidden = True Then
Sheets("Sheet1").Range("J:L").EntireColumn.Hidden = True
Sheets("Sheet1").Buttons("Button 1").Text = "Hide Rows G:I"
ElseIf Sheets("Sheet1").Range("P:R").EntireColumn.Hidden = True Then
Sheets("Sheet1").Range("M:O").EntireColumn.Hidden = True
Sheets("Sheet1").Buttons("Button 1").Text = "Hide Rows J:L"
ElseIf Sheets("Sheet1").Range("S:U").EntireColumn.Hidden = True Then
Sheets("Sheet1").Range("P:R").EntireColumn.Hidden = True
Sheets("Sheet1").Buttons("Button 1").Text = "Hide Rows M:O"
Else
Sheets("Sheet1").Range("S:U").EntireColumn.Hidden = True
Sheets("Sheet1").Buttons("Button 1").Text = "Hide Rows P:R"
End If
End Sub
关于这个脚本的好处是它循环。你可以继续点击它,它将逐步隐藏越来越多的行,然后显示所有行。
我希望这能回答你的问题。请记住,逻辑必须是可靠的,否则您将获得意想不到的结果。