クリックすると列「S-U」を非表示にするExcelボタンがあります。私は2回目のボタンをクリックしたいと思っているし、列 "P - R"を隠しているなどクリックあたりのボタンを操作することはできますか?この問題に対するVBAボタンのクリックごとに異なるマクロを割り当てます
答えて
あなたはそれがやりたいだけのいくつかは、(それはそれのように聞こえる)がある場合、私は私のマクロを持っているでしょうが、現在の状態を評価し、それに応じて行動します。
例では、最初にS-Uを非表示にし、次に2回目のクリックで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の文は "whatever = false"の場合より少し簡単です(技術的には "= True"と入力する必要はありません)。しかし、それはあなたが最後の可能性から始める必要があることを意味し、後ろ向きに働く。そうでなければ、 "= False"(私が最初に実証したように)で評価する必要がありますが、私はそれを少し難しくしています。結果は異なる場合があります。
"S:U"、 "P:R"、 "M:O"、 "J: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
このスクリプトに関する素晴らしい点は、ループすることです。それをクリックし続けるだけで、ますます多くの行が徐々に隠され、すべて表示されます。
これがあなたの質問に答えることを願っています。ロジックが堅牢でなければならない、または予期しない結果が生じることに注意してください。
一つの解決策は、グローバル変数を宣言し、それにカウンタを割り当てるされる:
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
を設定すると、もう一度やりたいことを何でもします。 3回目にしたい場合は、いつでもElse If i = 1 Then
などを行うことができます。
Visual Basic Editorで、新しいモジュールを作成していない場合は、新しいモジュールを作成してそこに配置します。ボタンを作成し、Button1_Clickマクロをボタンに割り当てます。
2つのオプションを切り替えるだけでよい場合は、ブール値を使用し、その後、オフのトグルのように:
Public x As Boolean
Private Sub CommandButton1_Click()
If x Then MsgBox ("ON") Else MsgBox ("OFF")
x = Not x
End Sub
- 1. Excelのvbaマクロで異なるシートのセルにチェックボックスを割り当てる
- 2. PySide QPushButtonコンテキストメニューを右クリックしてボタンごとに割り当てません
- 3. VBAフォームコントロールとアクティブなxコントロールコンボボックスでのマクロの割り当て
- 4. 割り当てにクリックVBA機能
- 5. クリックした送信ボタンに応じて異なるOnclicksを割り当てる
- 6. VBAコード - 別のファイルに異なるパスワードを割り当てる
- 7. listviewアイテムのアクティビティに異なるレイアウトを割り当てるクリック
- 8. ボタンに割り当てられたときのVBAの動作が異なります
- 9. ボタンの数に異なるコンテキストメニューを割り当てる
- 10. 異なるボタンに異なるセッション変数を割り当てる方法
- 11. マクロExcel:ユーザーフォームにマクロを割り当てます。
- 12. ボタンのクリックごとに異なる活動を開く
- 13. すべてのボタンをクリックするVBAマクロ
- 14. SAS:マクロを割り当てる
- 15. 異なるdivに同じボタンを割り当て、クリックでtypescriptを個別に管理する方法
- 16. 通知ボタンごとに異なるトリガーがクリックされています
- 17. マクロに割り当てられたボタンにコメントを追加する
- 18. 1つのUserControlに異なるViewModelを割り当てます。
- 19. plt.scatterplotの各ラベルに異なる色を割り当てます
- 20. キューブの位置をボタンのクリックに統一して割り当てますか?
- 21. リクエストごとにスレッドを割り当てます。
- 22. Cuda異なるメモリ割り当て
- 23. VBAは変数に不正な値を割り当てます
- 24. 異なるDockerコンテナに異なるパブリックIPを割り当てます
- 25. ボタンにコマンドを割り当てる - Tkinter
- 26. Eclipseのプロジェクトごとにパースペクティブを割り当てる
- 27. 異なるクラスのオブジェクトの値を割り当てます
- 28. VBA変数にストアドプロシージャの戻り値を割り当てます
- 29. グループごとに長いベクトルにベクトルを割り当てる
- 30. ループごとにXスレッドを1に割り当てる
上の例は完全に機能します。しかし、「M:O」、「J-L」、「G-I」という手順を「M-L」と「G-I」が隠れて何らかの理由で手続きを続行するのに問題があります。私は何かが足りない。 – William63775
@ William63775 - あなたは論理的な問題があると思う。答えに加えた編集をチェックしてください。うまくいけば、正しい方向に進むことができます。そうでない場合は、あなたが持っているものを投稿することができます。 –
チャームのように動作します!ありがとう!私はまだ非常にこれに新しいです! – William63775