
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
UserForm1.Showでエラーになります。
工学
-
-
4
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
5
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
8
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
9
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
10
Vba UserFormを前面に出す方法を教えてください
Visual Basic(VBA)
-
11
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
12
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
13
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
14
ListViewで、非表示列って作れますか?
Visual Basic(VBA)
-
15
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
16
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
17
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
18
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
19
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
20
Excel vba ListBoxについて
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】【画像あり】4つの...
-
excelのInitializeイベントとAc...
-
特定のPCだけ動作しないVBAマク...
-
教えて下さい
-
UserForm1.Showでエラーになり...
-
【エクセル】測定時間がバラバ...
-
配列数式の解除
-
wordを起動した際に特定のペー...
-
一つのTeratermのマクロで複数...
-
String""から型'Double'への変...
-
【VBA】ワークブックを開く時に...
-
メッセージボックスのOKボタ...
-
マクロで"#N/A"のエラー行を削...
-
ExcelのVBA。public変数の値が...
-
Excel マクロでShearePoint先の...
-
Excel マクロ VBA プロシー...
-
エクセルで縦に並んだデータを...
-
Excelのセル値に基づいて図形の...
-
TERA TERMを隠す方法
-
この行は既に別のテーブルに属...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】【画像あり】4つの...
-
ACCESSのVBAにてExcelのシ...
-
excelのInitializeイベントとAc...
-
Excelで別シートの共通する項目...
-
オートシェイプの不具合について
-
Excelマクロ 別シートへ連続コ...
-
「IsText」の使い方を教えてく...
-
excel
-
excel sheet の整理をしたいです
-
エクセルシートをひとつにまと...
-
同一ブック内・別シートの内容...
-
教えて下さい
-
特定のPCだけ動作しないVBAマク...
-
配列数式の解除
-
エクセルで特定の列が0表示の場...
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excelのセル値に基づいて図形の...
おすすめ情報