
excelのユーザーフォームのイベントではそれぞれ
Initializeイベント(フォームが表示される前)と
Activateイベント(フォームがアクティブになったとき)
のイベントがあり、フォーム上のコントロールの設定値を初期化したい際によく
Initializeイベントを使用しています。
しかし、ワークシート上にアクティブコントロールを設置し、その初期設定をそのワークシートが開いたときに設定したい場合、ワークシートではInitializeイベントがなく、Activateイベントしかないため、他のシートから遷移した場合は、このActivateイベントが発生するのですが、もともとコントロールを設置しているワークシート上で保存、そのブックを起動した際、起動したときに表示されるワークシートでは起動時にはActivateイベントは発生しません。
とりあえず、解決策としてworkbook_openイベントでScreenUpdating = false(画面線画させず)後、activesheet.nameで開いたときのアクティブシート名を変数にセットし、一時的に非表示のワークシートにactiveさせ、その後変数でセットしたワークシート名のワークシートにactiveしその後、ScreenUpdating = trueとして起動時に強引にactiveイベントを発生させています。
これ以外の簡単な方法ってないんですかね。
No.2ベストアンサー
- 回答日時:
抜けていたので補足します。
Call Module1.WsActivateEvent のようにしないといけませんね
例のWsActivateEventはパブリックにする必要があるので
引数を持たせて(ダミーでOK)、ユーザーから直接実行(表示しない)できないようにする必要もあるかと思います。
すみません。
ありがとうございます。結局どうやってもステップ数(行数)はふえてしまいますね。
実は実際にやりたかったことといえば、各シート(複数同じシートがあるとおもってもらえば結構です。)にシートで設定した表の集計をするコマンドボタンを作って各シートほとんど同じ処理(途中一部のみシートの設定の関係上違う処理が入ります。)をしようとしました。
各シートにコマンドボタンを配置してクリック時のイベントプロシジャーを設定し、Callで流そうとしたんですが、シートによって一部処理が異なる箇所があったため、Callステートメントではやりにくいと思い、ユーザークラスモジュールを作成し、Property Set でコマンドボタンのプロパティを作成、その対応する変数にWithEventsを設定し、コマンドボタンのイベントをユーザークラスモジュールでイベントを発生させ、シートごとに違う処理をRaiseEventにてシートモジュールに記述する方式を使用しました。
この場合、シートを読み込む際、作成したクラスモジュールを使用するためNewステートメントでインスタンスを作成し、当該クラスモジュールでのプロパティにコマンドボタンをSetしなければなりません。しかし、このインスタンス作成等をActiveイベントにて設定をしたら、起動時のみこのActiveイベントが発生しなかったので強制的にActiveイベントを起こしたのですが・・・
シートクラスモジュールではシートに設定してあるコマンドボタンはMe.コマンドボタン名で設定しやすいですしね・・
教えていただいたやり方はActiveイベント内処理をCallにてジェネラルプロシジャーに実行させ、同様にWorkBooks_Open時にCallにて同じ処理をするということですね・・・
まあ、どっちもありかな?と思います。しかし、ユーザーフォームと同様なんでシート読み込み時にInitializeイベントないんだろ。
No.1
- 回答日時:
こんばんは、
ブックを開いた時のWorksheet_Activateを使いたいと言う事でしょうか?
的外れの回答かも知れませんが、Worksheet_Activateは引数を持っていないと思いますので、(引数を持っていても同じ)
イベントに書かれているコードを標準モジュールに書きます。
例えば
Sub WsActivateEvent()
hogehoge
End sub
Private Sub Workbook_Open()
Call WsActivateEvent
End Sub
Private Sub Worksheet_Activate()
Call WsActivateEvent
End Sub
この様にすれば処理は、Workbook_Open実行時に直接WsActivateEventを実行出来ると思います。(Worksheet_Activateからも)
ただし、WsActivateEvent 内のコードでActive~の使用は出来るだけ止め各オブジェクトを明示した方が良いかも知れません。
WsActivateEventに引数を持たせればOpenから呼んだ時とWorksheet_Activateから呼んだ時の実行を分ける事も出来るかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) エクセルのイベントVBAを複数のシートで動かしたい 1 2022/12/07 16:55
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Excel(エクセル) excelvbaのenableeventsについて 3 2022/08/30 11:20
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/25 11:42
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 3 2022/06/10 09:24
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
-
4
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
5
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
6
UserForm1.Showでエラーになります。
工学
-
7
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
8
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
9
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
10
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
11
Excel vba ListBoxについて
Excel(エクセル)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
14
Vba UserFormを前面に出す方法を教えてください
Visual Basic(VBA)
-
15
リストビューをスクロールさせるには
Visual Basic(VBA)
-
16
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
17
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
18
ExcelのVBAでフォームが表示されない
Excel(エクセル)
-
19
ListViewで、非表示列って作れますか?
Visual Basic(VBA)
-
20
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロ 別シートへ連続コ...
-
VBAで繰り返し処理の速度を...
-
エクセルマクロ シートの追加
-
ACCESSのVBAにてExcelのシ...
-
excelのInitializeイベントとAc...
-
特定のPCだけ動作しないVBAマク...
-
教えて下さい
-
配列数式の解除
-
エクセルで特定の列が0表示の場...
-
一つのTeratermのマクロで複数...
-
Excel・Word リサーチ機能を無...
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
UserForm1.Showでエラーになり...
-
Excel_マクロ_現在開いているシ...
-
【VBA】ワークブックを開く時に...
-
バッチファイルでEXCELを起動し...
-
「実行時エラー '3167' レコー...
-
ExcelのVBA。public変数の値が...
-
2次元動的配列の第一引数のみを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelのInitializeイベントとAc...
-
ACCESSのVBAにてExcelのシ...
-
Excelで別シートの共通する項目...
-
CSVファイルの読み込みVBA作成...
-
エクセルVBAで名前の決まってい...
-
VBAでシートをまたぐ処理の方法
-
Excelマクロ 別シートへ連続コ...
-
別のシートの文字列を他のシー...
-
【VBA】セルとシート操作の繰り...
-
オートシェイプの不具合について
-
エクセルVBAでブックの分割
-
ExcelVBA: 5行ごとにテキスト...
-
excel
-
ExcelVBAを使っての振り分け処理
-
「IsText」の使い方を教えてく...
-
配列数式の解除
-
エクセルで特定の列が0表示の場...
-
教えて下さい
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
おすすめ情報