[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファンクションキーの設定』(いいちこ)
いつも勉強のため、拝見させて頂いております。
ファンクションキーF1を押すと、form3のコマ ンドボタン3がクリックされるというような ことはできるのでしょうか?
そのBookの ThisWorkbookモジュールに以下のように3つのプロシージャを 記述して、保存していったん終了してから、 ユーザーフォームを開いて、 [F1]キーを押してみてください。
'-------------------------------- Option Explicit
Private Sub Workbook_Open() Application.OnKey "{F1}", "ThisWorkbook.OnF1Key" End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.OnKey "{F1}" '[F1]の機能を元に戻す End Sub
Sub OnF1Key() If DoEvents Then 'UserFormが表示されていたら UserForms(0).CommandButton3.Value = True End If End Sub
(kanabun)
フォームを閉じるとF1キー本来の機能に戻します。 (弥太郎) '---------- 標準モジュールへ Sub macro() UserForm3.CommandButton3.Value = True End Sub
フォームモジュールへ Private Sub CommandButton3_Click() MsgBox "コマンドボタン3がクリックされました" End Sub Private Sub UserForm_Initialize() Application.OnKey "{F1}", "macro" End Sub Private Sub UserForm_Terminate() Application.OnKey "{F1}" End Sub
実際にそのユーザーフォームのコントロールの配置構成など記述した方がよいと思いますよ それによっては、別の方法もあるかもしれないので・・・。
対象ユーザーフォームをUserForm3(最低、コマンドボタンのCommanbutton3は、存在する)だとすると、
まず、クラスモジュール(名前は、既定 Class1)に
'================================================================== Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Function GetAsyncKeyState Lib _ "User32.dll" (ByVal vKey As Long) As Long Event keypress(ByVal kcode As Long) Private stopflg As Long '================================================================= Sub key_ment(ParamArray KeyCode() As Variant) Dim g0 As Long Dim ky As Long On Error Resume Next stopflg = 0 Do Until stopflg = 1 Sleep 50 DoEvents For g0 = LBound(KeyCode()) To UBound(KeyCode()) ky = KeyCode(g0) If GetAsyncKeyState(ky) <> 0 Then RaiseEvent keypress(ky) Exit For End If Next Loop On Error GoTo 0 End Sub '=================================================================== Sub stop_keyment() stopflg = 1 End Sub
対象であるUserForm3のモジュールに
'==================================================================== Option Explicit Private WithEvents cls As Class1 Private Sub cls_keypress(ByVal kcode As Long) If kcode = vbKeyF1 Then CommandButton3.Value = True End If End Sub '====================================================================== Private Sub UserForm_Activate() Set cls = New Class1 cls.key_ment vbKeyF1 End Sub '====================================================================== Private Sub UserForm_Terminate() cls.stop_keyment Set cls = Nothing End Sub '====================================================================== Private Sub CommandButton3_Click() MsgBox "コマンドボタン3がクリックされました" End Sub
最後に標準モジュールに
'===================================================================== Option Explicit Sub main() UserForm3.Show End Sub
これでmainを実行してください。 UserForm3が表示されます。
F1キーを押すことで CommandButton3をクリックしたときと同じ動作をします。
試してみてください。
尚、F1キーにこだわらないなら、Accelerator を使う方法もあります。検討してみてください。
ichinose
ご参考。 [[20070314151621]]『コマンドボタン(VBA) 』(純丸) (純丸)(o^-')b
自分なりにコードに追加などして試したのですが、
できませんでした。
できるのであれば、love_0825_1104_taiga@wcm.ne.jp宛にご返信願いますか?
(かつ) 2015/08/12(水) 08:37
メールアドレスはさらさない方がいいかと。
ここは個人的やり取りをする場ではなく公開の掲示板なんで なぜ公開でレスを受け付けないのかが疑問です。
※メアド公開してるのって大体うっかりメールしたら迷惑メール わんさか来るってパターンが多いのでメアドにメールする人とい うのはここでは皆無かと思います。 (カエムワセト) 2015/08/12(水) 08:58
メールアドレスに関しては、カエムワセトさんのコメント通り。 レスは、ここを閲覧すれば十分でしょ? 怖くてβもメールでのレスなんてできません。
それはさておき。
>F1キーだけじゃなく複数のファンクションキー の設定はできますか? >自分なりにコードに追加などして試したのですが
Application.Onkey のヘルプ等、検索してみましたか?
https://msdn.microsoft.com/ja-jp/library/office/Ff197461.aspx
(β) 2015/08/12(水) 09:15
この件のコードに関してはよく理解ができずに
自分なりに変更してみたのですができませんでした。
独学で勉強してるのでご回答?をお願いできませんか?
(かつ) 2015/11/04(水) 08:03
この機能を有効化するタイミング、無効化して初期状態に戻すタイミング、 ファンクションキーで何を実行するのか、といったことは要件に合わせて 弥太郎さんやichinoseさんが提示されたコードを参考に組み立ててください。
以下は基本です。難しいことは何もありません。標準モジュールに。
SerFunc を実行した後、ファンクションキーを押せばファンクションコードごとに紐つけた処理を行います。 ResetFuncを実行すれば、そのあとファンクションキーを押しても、標準の動きになります。
Sub SetFunc() Application.OnKey "{F1}", "ProcF1" Application.OnKey "{F2}", "ProcF2" Application.OnKey "{F3}", "ProcF3" End Sub
Sub ResetFunc() Application.OnKey "{F1}" Application.OnKey "{F2}" Application.OnKey "{F3}" End Sub
Sub ProcF1() MsgBox "F1が押されました" End Sub
Sub ProcF2() MsgBox "F2が押されました" End Sub
Sub ProcF3() MsgBox "F3が押されました" End Sub
(β) 2015/11/04(水) 09:42
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.