アプリ版:「スタンプのみでお礼する」機能のリリースについて

教えてください。
シート1ではフォーム1のみを使用、シート2ではフォーム2のみを使用、シート3ではフォーム3のみを使用します。
他シートを選択した時、現在使用中のフォームを閉じて、対応するフォームを表示させたいのですが、どうすればよろしいでしょうか。

A 回答 (6件)

VBAでそれぞれのsheetのイベントで


Private Sub Worksheet_Deactivate()
'そのシートのフォームを閉じる
End Sub
Private Sub Worksheet_Activate()
'そのシートのフォームを開く
End Sub
の様にすれば、簡単でわかりやすいかと思います。

sheetがアクティブになったかどうかは
workbookのイベントでもわかりますが、
その時は、シートの区別をつけないといけません。
場合によっては、その方がコードが少なくて済むかもしれません
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。基本を知らないまま、今まで作業してきたので、sheetイベントを設定するということがようやくわかり、とても嬉しいです。
ところで、今まで標準モジュールにすべてを記述していたのですが、単独のシートで納まるものであれば、sheetイベントに移し変えた方が良いのでしょうか?

お礼日時:2004/11/19 11:35

#2です。


私は
>ただFormを閉じないと、シートが選択できないので
不完全かも知れません。
と書きました。
この問題が#3さんの
>各UserFormのプロパティーのShowModalをFalseに設定してください
を解決し様とするものです。実際やって見れば判ります。
>「UserFormのプロパティーのShowModalをFalseに」というのは、どのような事のためにでしょうか?Hideとの関連ですか?と#3でお礼に書いておられたので。
●#2のお礼の
>標準モジュールに記述するのとWorksheetイベントに記述するのとは、どのように分けて考えるものなのでしょうか?
(1)標準モジュール
実行は、実行する人の実行起動により実行される。
ただ(2)の中にも組み入れられる。
(2)イベントプロセジュアー
イベントという、「クリックなどマウスの動作」や「マウスの動作によって引き起こされる(例 フォームが読みこまれるなど)事象」や時間経過などをキッカケとして動作する。キーボード入力関連のキッカケもある。実はOSに通知(ウインドウズメッセージ)が行っているすべてのコンピュタ関連の事象うち、代表的な一部をVBAプログラマに開放・提供している。
    • good
    • 0
この回答へのお礼

詳細ありがとうございます。よく考えながら振り分けて試してみます。

お礼日時:2004/11/19 17:46

>今まで標準モジュールにすべてを記述していたのですが…


それぞれのイベント毎にコードを記述するとコードが分散し見通しが悪くなるというデメリットがありますが
そのイベントで処理する部分はそのイベント部分で書いた方がいいと思います。
全体で共通的に使用できる部分は、
手続きや関数として、標準モジュールに書いておくのがいいと思います。
もちろん、標準モジュールに全部書いてもかまいません。
その分割度合いは、「好み」だと思います。
ただ、
シートのグローバル部分に書くのは、いいですが、
シートのイベント部分に何もかも(必要のない部分まで?<変な言い方ですね)書くのはいただけないと思います。イベントの起こる頻度にもよると思いますが。
    • good
    • 0
この回答へのお礼

なるほど。ありがとうございます。

お礼日時:2004/11/19 17:43

>「UserFormのプロパティーのShowModalをFalseに」というのは、どのような事のためにでしょうか?Hideとの関連ですか



ShowModalプロパティーをFalseにするとUserFormを開きながらExcelの他の機能も利用できます
したがってUserFormを開きながらっでも他のシートを選択出来るようになります
TrueにするとUserFormを閉じないと他の操作が出来ません
    • good
    • 0
この回答へのお礼

そうなんですか。ありがとうございます。

お礼日時:2004/11/19 17:42

シート1のイベントにたとえば


Private Sub Worksheet_Activate()
UserForm1.Show
End Sub
Private Sub Worksheet_Deactivate()
UserForm1.Hide
End Sub
とするとShhet1がアクティブになったとき
UserForm1が開き
Shhet1が非アクティブになったとき
UserForm1が閉じる

各シートイベントに記入すればよいと思います

ただ各UserFormのプロパティーのShowModalをFalseに設定してください
    • good
    • 0
この回答へのお礼

ありがとうございます。
「UserFormのプロパティーのShowModalをFalseに」というのは、どのような事のためにでしょうか?Hideとの関連ですか?それともほかの・・・

お礼日時:2004/11/19 13:08

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を閉じないと、シートが選択できないので
不完全かも知れません。
    • good
    • 0
この回答へのお礼

ありがとうございます。なるほど、こういう方法もあるのですね。今後に活用できそうです。ところで、標準モジュールに記述するのとWorksheetイベントに記述するのとは、どのように分けて考えるものなのでしょうか?

お礼日時:2004/11/19 11:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A