我有一個excel按鈕,當點擊它時隱藏列「S-U」。我想第二次點擊按鈕,它隱藏了「P-R」列等。你可以每次點擊操作excel按鈕嗎?每次點擊VBA時分配一個不同的宏按鈕
回答
如果有隻是你想要它做的(這聽起來像它),我有我的宏幾件事評估當前狀態,並採取相應的行動。
在您的示例中,您表明您首先希望它隱藏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
當然,你可以用另外的條件和動作..擴展此像改變按鈕上的文字來代表它下一步會做什麼:
假設你擁有了它標記「隱藏行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來評估情況,你想隱藏它們。個人注意:我發現「IF whatever = true」語句比「if whatever = false」更容易遵循(從技術上講,甚至不必輸入「= True」)。但這意味着你需要從最後的可能性開始,並向後工作。否則,你需要通過「= False」來評估(就像我第一次演示的那樣),但我覺得有點難以遵循。你的結果可能有所不同
您表示想要這些隱藏的依次是: 「S:U」, 「P:R」, 「M:O型」, 「J:L」, 「G:我」。這是一個腳本,一旦隱藏了所有這些行,按鈕就會顯示所有這些行。因此,我首先評估一下最後一種可能性是否屬實 - 那就是 - 行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
關於這個腳本的好處是它循環。你可以繼續點擊它,它會逐漸隱藏越來越多的行,然後顯示它們。
我希望這能回答你的問題。請記住,邏輯必須堅實,否則會得到意想不到的結果。
一個解決這個問題是可以定義一個局部變量,並分配一個計數器它:
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宏分配給按鈕。
如果您只需要在兩個選項之間切換,像斷切換,然後使用一個布爾值:
Public x As Boolean
Private Sub CommandButton1_Click()
If x Then MsgBox ("ON") Else MsgBox ("OFF")
x = Not x
End Sub
- 1. 每次點擊一個按鈕時加載相同的div
- 2. 每次點擊同一個按鈕時添加圖片
- 3. 每個IP點擊一次按鈕
- 4. 不同功能的按鈕[]每次點擊一個特定的按鈕
- 5. 顯示不同的圖像每次點擊按鈕時
- 6. 如何在每次點擊同一個按鈕時創建一個新的textView?
- 7. 每次按鈕被點擊
- 8. Powershell按鈕每次點擊時運行
- 9. 每次點擊一個按鈕時的多種功能
- 10. 每次點擊按鈕時生成一個新的網格
- 11. 點擊動作按鈕,每次點擊該按鈕時顯示一組字段
- 12. 重置setTimeout每按鈕點擊一次?
- 13. C#按鈕,點擊每日一次
- 14. JQuery - 每2秒點擊一次按鈕
- 15. 按鈕點擊多次點擊一次
- 16. 如何爲Android中點擊的每個按鈕分配不同的任務?
- 17. VBA點擊一個特定的按鈕
- 18. 每次點擊按鈕時,將一個數字連接到url?
- 19. 每按一次按鈕都會增加一個數組點擊
- 20. 如何添加一個buttton2,同時點擊另一個按鈕1和按鈕3,同時點擊按鈕2
- 21. 每次點擊一個按鈕創建一個CALayer
- 22. 每次點擊一個按鈕創建一個新窗體
- 23. 分配給每次點擊次數/點擊次數的函數
- 24. 每30秒按一次按鈕vba
- 25. 使用VBA點擊一個按鈕
- 26. 「點擊」一個JavaScript按鈕與VBA
- 27. Power Point VBA:上一個按鈕點擊
- 28. 每次點擊按鈕時,重複部分佈局android
- 29. 限制按鈕點擊爲每5分鐘一次
- 30. 點擊滾動按鈕,每隔幾秒鐘點擊一次
頂部的例子完美地工作!然而,由於某些原因它隱藏了「M-L」和「G-I」正常工作,我無法繼續執行「M:O」,「J-L」和「G-I」程序。我錯過了一些東西。 – William63775
@ William63775 - 我懷疑你有一個邏輯問題。檢查我對答案的編輯,希望能讓你朝着正確的方向前進。如果沒有,你可以發佈你有什麼,我們可以編鐘。 –
工程就像一個魅力!謝謝!我對此仍然很陌生! – William63775