Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8560 / 13644 ツリー ←次へ | 前へ→

【32540】ユーザーフォームアクティブ状態で つーちく 05/12/16(金) 23:01 質問[未読]
【32541】Re:ユーザーフォームアクティブ状態で Kein 05/12/16(金) 23:18 発言[未読]
【32542】Re:ユーザーフォームアクティブ状態で つーちく 05/12/16(金) 23:49 質問[未読]
【32543】Re:ユーザーフォームアクティブ状態で Kein 05/12/17(土) 1:03 発言[未読]
【32544】Re:ユーザーフォームアクティブ状態で Ned 05/12/17(土) 1:49 発言[未読]
【32559】Re:ユーザーフォームアクティブ状態で つーちく 05/12/17(土) 18:13 発言[未読]
【32560】Re:ユーザーフォームアクティブ状態で Ned 05/12/17(土) 18:51 発言[未読]
【32561】Re:ユーザーフォームアクティブ状態で Kein 05/12/17(土) 21:11 発言[未読]
【32563】Re:ユーザーフォームアクティブ状態で つーちく 05/12/18(日) 0:01 質問[未読]
【32564】Re:ユーザーフォームアクティブ状態で Ned 05/12/18(日) 0:55 発言[未読]
【32565】Re:ユーザーフォームアクティブ状態で Ned 05/12/18(日) 1:03 発言[未読]
【32566】Re:ユーザーフォームアクティブ状態で つーちく 05/12/18(日) 1:18 お礼[未読]

【32540】ユーザーフォームアクティブ状態で
質問  つーちく  - 05/12/16(金) 23:01 -

引用なし
パスワード
   始めて質問です。いつも参考にさせてもらっていますが、どうしても解決できないことがあったので質問です。

まずは普通にユーザーフォームを表示させます。
その次にキーの[0]を押したときにあるマクロを動かしたいといった場合のイベントがわかりません。
ユーザーフォームのモジュール内に

=====================================
Private Sub UserForm_Activate()
Application.OnKey "{0}", "テストA"
End Sub
=====================================

と表示させて

標準モジュール内に
=====================================
Sub テストA()
MsgBox "動作しました"
End Sub
=====================================
と上手くいくはずが上手くいきません。どういったのかわかりません。教えてください。よろしくお願いします。

【32541】Re:ユーザーフォームアクティブ状態で
発言  Kein  - 05/12/16(金) 23:18 -

引用なし
パスワード
   ↓このへんを参考にして下さい。
http://park7.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200412/04120179.txt

【32542】Re:ユーザーフォームアクティブ状態で
質問  つーちく  - 05/12/16(金) 23:49 -

引用なし
パスワード
   全部のプログラムを標準モジュール内に書いてよろしいのでしょうか?

ユーザーフォームがアクティブのときなのでユーザーフォーム内に書くのが正解なのでしょうか?

【32543】Re:ユーザーフォームアクティブ状態で
発言  Kein  - 05/12/17(土) 1:03 -

引用なし
パスワード
   >ユーザーフォーム内に書く
そうですね・・。コードを書く場所は、普通「フォームモジュール」と呼びますが。

【32544】Re:ユーザーフォームアクティブ状態で
発言  Ned  - 05/12/17(土) 1:49 -

引用なし
パスワード
   ▼つーちく さん:
こんにちは。
テストA は標準モジュールかフォームモジュール、どちらでもいいですが、
Application.OnKey は動作しないので、KeyDownイベントはどうですか?

Private Sub UserForm_KeyDown _
  (ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 96 Then テストA
End Sub

ただし、上記イベントはUserFormにフォーカスされている時のイベントです。
つまりUserForm上のどのControlにもフォーカスがない時。

ですので特定のControlがフォーカスされている時に割り当てたい場合は
そのControlのKeyDownイベントを使う事になるかと思います。

【32559】Re:ユーザーフォームアクティブ状態で
発言  つーちく  - 05/12/17(土) 18:13 -

引用なし
パスワード
   皆さんありがとうございます。

皆さんのおかげで・・・と言いたいところなのですが、なんだかうまくいきません。
いままでいろいろ苦労してやって来ましていろいろと作ってきましたが、何か大きな壁にぶち当たってるのではないかと思うくらい上手くいきません。

自分でもう少し悩んでみたいと思います。

でも何で動かないんだろう・・・。

同じように挿入してんだけどな・・・。

【32560】Re:ユーザーフォームアクティブ状態で
発言  Ned  - 05/12/17(土) 18:51 -

引用なし
パスワード
   ▼つーちく さん:

>自分でもう少し悩んでみたいと思います。
同じ悩まれるにしても、パーツごとにチェックされるのがいいと思います。

Private Sub CommandButton1_KeyDown _
  (ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  MsgBox KeyCode
End Sub

↑KeyDownイベントがあるならCommandButtonでなくてもいいのですが、
何かダミーでコントロールをつくって、フォーカス後、何かキーを押して
MsgBox KeyCode が表示されるかチェックされてみては?^ ^

【32561】Re:ユーザーフォームアクティブ状態で
発言  Kein  - 05/12/17(土) 21:11 -

引用なし
パスワード
   >Application.OnKey は動作しない
は、テストしてみたところ確認できました。KeyDownイベントの方は

Private Sub UserForm_KeyDown _
  (ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 96 Then MsgBox "ゼロのキーが押されました", 64
End Sub

というようなコードでテストしてみて下さい。これなら標準モジュールのマクロを
呼び出すことなく、このままでテストできます。ちなみにこれは、こちらでも動作する
ことを確認しています。

【32563】Re:ユーザーフォームアクティブ状態で
質問  つーちく  - 05/12/18(日) 0:01 -

引用なし
パスワード
   皆さんいろいろありがとうございます。

無事解決の兆しが見えてきました。すごく感謝しています。それに勉強になりました。場合によっては使えないイベントがあるとは・・・。ほんとに難しいものですね。

もう1つ質問になりますが、ユーザーフォームのどのコントロールにフォーカスがあっても動作するようにはなりませんか?コントロール分マクロを組めばいい話なんですが・・・。私の作ったプログラムの性質上UserFormのコントロールにフォーカスが無いといった状態が無いのでよろしくお願いします。

【32564】Re:ユーザーフォームアクティブ状態で
発言  Ned  - 05/12/18(日) 0:55 -

引用なし
パスワード
   ▼つーちく さん:
>無事解決の兆しが見えてきました。
とりあえずは良かったですね。

>ユーザーフォームのどのコントロールにフォーカスがあっても動作するようにはなりませんか?
・・・
と、いう事はですね。
それ用にCommandButtonをつくってAcceleratorプロパティを使う・・・くらいでしょうか。
クラスモジュールより簡単だと思うのですが。
↓参考ログ
http://park7.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200501/05010244.txt

【32565】Re:ユーザーフォームアクティブ状態で
発言  Ned  - 05/12/18(日) 1:03 -

引用なし
パスワード
   ここにもありましたね^ ^
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=15846;id=excel
ちなみにOnkeyが使えないのは、
Application.OnKeyのApplicationはExcelを指します。
MSFormsは言わば別Application(表現がヘン?)だから、だそうです。

【32566】Re:ユーザーフォームアクティブ状態で
お礼  つーちく  - 05/12/18(日) 1:18 -

引用なし
パスワード
   おかげさまで無事私のしたいことができるようになりました。

本当に感謝いたします。まだまだ発展途上で未熟なプログラムかもしれませんが、今回の課題は無事クリアーできそうです。

いろいろ調べてくださってありがとうございます。

ユーザーフォームのすべてのコントロールの話はとりあえずコントロール分イベントを作って処理しようかと思っています。4つくらいなので。後は同じプログラムなので標準モジュールに飛ばすような感じにしようかと思っています。そんなことするなら・・・って思う方も多いかと思いますが、徐々にステップアップしていきたいと思います。

本当にありがとうございました。

8560 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free