![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.1ベストアンサー
- 回答日時:
VBAでそれぞれのsheetのイベントで
Private Sub Worksheet_Deactivate()
'そのシートのフォームを閉じる
End Sub
Private Sub Worksheet_Activate()
'そのシートのフォームを開く
End Sub
の様にすれば、簡単でわかりやすいかと思います。
sheetがアクティブになったかどうかは
workbookのイベントでもわかりますが、
その時は、シートの区別をつけないといけません。
場合によっては、その方がコードが少なくて済むかもしれません
早速のご回答ありがとうございます。基本を知らないまま、今まで作業してきたので、sheetイベントを設定するということがようやくわかり、とても嬉しいです。
ところで、今まで標準モジュールにすべてを記述していたのですが、単独のシートで納まるものであれば、sheetイベントに移し変えた方が良いのでしょうか?
No.6
- 回答日時:
#2です。
私は
>ただFormを閉じないと、シートが選択できないので
不完全かも知れません。
と書きました。
この問題が#3さんの
>各UserFormのプロパティーのShowModalをFalseに設定してください
を解決し様とするものです。実際やって見れば判ります。
>「UserFormのプロパティーのShowModalをFalseに」というのは、どのような事のためにでしょうか?Hideとの関連ですか?と#3でお礼に書いておられたので。
●#2のお礼の
>標準モジュールに記述するのとWorksheetイベントに記述するのとは、どのように分けて考えるものなのでしょうか?
(1)標準モジュール
実行は、実行する人の実行起動により実行される。
ただ(2)の中にも組み入れられる。
(2)イベントプロセジュアー
イベントという、「クリックなどマウスの動作」や「マウスの動作によって引き起こされる(例 フォームが読みこまれるなど)事象」や時間経過などをキッカケとして動作する。キーボード入力関連のキッカケもある。実はOSに通知(ウインドウズメッセージ)が行っているすべてのコンピュタ関連の事象うち、代表的な一部をVBAプログラマに開放・提供している。
No.5
- 回答日時:
>今まで標準モジュールにすべてを記述していたのですが…
それぞれのイベント毎にコードを記述するとコードが分散し見通しが悪くなるというデメリットがありますが
そのイベントで処理する部分はそのイベント部分で書いた方がいいと思います。
全体で共通的に使用できる部分は、
手続きや関数として、標準モジュールに書いておくのがいいと思います。
もちろん、標準モジュールに全部書いてもかまいません。
その分割度合いは、「好み」だと思います。
ただ、
シートのグローバル部分に書くのは、いいですが、
シートのイベント部分に何もかも(必要のない部分まで?<変な言い方ですね)書くのはいただけないと思います。イベントの起こる頻度にもよると思いますが。
No.3
- 回答日時:
シート1のイベントにたとえば
Private Sub Worksheet_Activate()
UserForm1.Show
End Sub
Private Sub Worksheet_Deactivate()
UserForm1.Hide
End Sub
とするとShhet1がアクティブになったとき
UserForm1が開き
Shhet1が非アクティブになったとき
UserForm1が閉じる
各シートイベントに記入すればよいと思います
ただ各UserFormのプロパティーのShowModalをFalseに設定してください
ありがとうございます。
「UserFormのプロパティーのShowModalをFalseに」というのは、どのような事のためにでしょうか?Hideとの関連ですか?それともほかの・・・
No.2
- 回答日時:
ThisWorkbookのイベントに
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Select Case Sh.Name
Case "Sheet1"
MsgBox "Sheet1"
UserForm1.Show
Case "aaa"
MsgBox "aaa"
UserForm2.Show
Case "Sheet3"
MsgBox "Sheet3"
UserForm3.Show
End Select
End Sub
を作ってみました。
ご参考に。
ただFormを閉じないと、シートが選択できないので
不完全かも知れません。
ありがとうございます。なるほど、こういう方法もあるのですね。今後に活用できそうです。ところで、標準モジュールに記述するのとWorksheetイベントに記述するのとは、どのように分けて考えるものなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
VBA(エクセル)のユーザーフォームの固定
Visual Basic(VBA)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
7
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
8
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
9
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
10
エクセルファイルを開く時、常に同じシートから開くようにするには?
Windows Vista・XP
-
11
エクセル ユーザーフォームにオートシェープ(図形)を貼り付けるこは可能なのでしょうか?
Excel(エクセル)
-
12
エクセル UserForm 呼び出しでフリーズしてしまいます
その他(Microsoft Office)
-
13
どこにもフォーカスを当てたくない
Access(アクセス)
-
14
同じシート内にイベントプロシージャが二つある時
Excel(エクセル)
-
15
ExcelVBAで指定外のUserFormを閉じる
Excel(エクセル)
-
16
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
17
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
18
Excelにて、ユーザーフォームで、日付けの範囲を指定し、検索しデーターを抽出し 別シートへ転記した
Excel(エクセル)
-
19
エクセル ダブルクリック入力の範囲が複数の場合
Excel(エクセル)
-
20
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
括弧があるとHYPERLINKで飛べな...
-
原付 レッツシート開け方
-
シートベルトの固定解除
-
Excel VBA シート名変更時、重...
-
エクセルで複数のシートをフォ...
-
ポップコーンの捨て方
-
XR250BAJAのシートのはずし方を...
-
フォルツァ バッテリーを外して...
-
エクセルVBA 4行飛ばしで転記す...
-
建築模型、カーブの作り方
-
Excel複数シートから日付と文字...
-
リアシート無しで運転してたら...
-
水の染み込んだバイクのシート...
-
A4トレース台の最初に貼ってあ...
-
台車の下に敷くシートについて
-
取れなくなった熱伝導シートの...
-
エクセルVBA:他シートを選択す...
-
車のシートがへたってきました...
-
失敗したスライムの捨て方につ...
-
BIKEのシートの取り外し方を教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のシートをフォ...
-
括弧があるとHYPERLINKで飛べな...
-
建築模型、カーブの作り方
-
原付 レッツシート開け方
-
エクセルVBA 4行飛ばしで転記す...
-
Excel複数シートから日付と文字...
-
Excel VBA シート名変更時、重...
-
フォルツァ バッテリーを外して...
-
水の染み込んだバイクのシート...
-
BRIDEのシート張り替えってでき...
-
車のシートでおもらし
-
ノートe12ガソリン
-
リアシート無しで運転してたら...
-
ポップコーンの捨て方
-
車のシートがへたってきました...
-
シートベルトの固定解除
-
バイクのシートを取り替えても...
-
台車の下に敷くシートについて
-
マグネットシートって・・・
-
IHクッキングヒーターの操作パ...
おすすめ情報