質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

9558閲覧

[VBA]ボタンにFキー等を対応、履歴/複数情報の管理がしたい

morikawa0208

総合スコア27

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/08/19 07:08

編集2016/08/19 08:56

最近転職し、Excel VBAにて人事管理を作成しており、
他の人も使えるようユーザーフォームを使用しています。
プログラミング自体始めたばかりなので実現できるかも不明なのですが、教えていただけるとありがたいです。

###前提・実現したいこと
①コマンドボタンに対して、Fキー(F1~F12)、ESCを対応させたい
②履歴情報/複数情報の管理をしたい(例:家族情報)
従業員登録画面を開いた際に、従業員番号等をキーにして別タブに登録した内容を一覧表示
追加・修正・削除も行いたい

###試したこと
①Excel2013では、キーボード取得イベントプロパティがない(Accessにはあるらしい・・・)
②・最初はユーザーフォーム内にワークシートを表示させようとしたが、ExcelのVerにより不可
・リストボックスに登録した内容を表示させる方法を取ろうとしたが、同じ画面にて登録修正できないことに気づき断念
・[家族情報]ボタンを押すことで[家族情報シート]にジャンプ。同時に基本情報入力欄を非表示
ジャンプした際に、基本情報にて呼び出している従業員の番号をキーとしてフィルターをかけ、
該当社員の家族情報のみ一覧で表示。
追加、削除、変更は通常のExcelワークシート操作と同じ。
→何かほかに簡単な方法はないか

###その他
基礎もなく、ただ理想を書いているので変な内容を書いているかもしれませんが、
何卒よろしくお願いいたします。

###現状
②について継続して回答お待ちしております。

①について回答して頂いた方のおかげでkydownイベントの取得までこぎつけることができました。
ただ、ボタンが非アクティブ状態(他のテキストボックス等にフォーカスがある状態)では反応しません。。。
ボタンにフォーカスをあてるとFキーで反応します。
心当たりのある方、何卒よろしくお願いいたします

'Fキー割り当て
Private Sub cmd_Kensaku_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = vbKeyF12 Then 'F12キー
cmd_Kensaku = True
End If
End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

そのコマンドボタンにはマクロが登録されていますか?
それならばマクロにショートカットキーを定義すればできます。
ただしFキー(F1~F12)は割り当てれません。
割り当てられるキーはCtrl+??になります。

もしくはボタンをActiveXコントロールのボタンにして、
プロパティでAcceleratorを設定しCaptionを設定すれば
Alt+??で割り当てることができます。

Fキー(F1~F12)はExcelのショートカットキーとして割り当てられているので、
それを変更するのはよくないかとおもいます。

投稿2016/08/19 07:22

jm1156

総合スコア866

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morikawa0208

2016/08/19 07:43

回答ありがとうございます! ファンクションキー1個には登録できないんですね。 以前はソフトを使っていたのでどうもマウスが煩わしくて・・・。 プロパティのAcceleratorにFキー設定できなかったので、 もうすこし調べてみます;-; ありがとうございました!
jm1156

2016/08/19 07:50

しらべたらVBAで設定することで、ファンクションキーにもマクロを割り当てれるようです。 Application.OnKey "{F12}", "マクロ名" といった感じです。
morikawa0208

2016/08/19 08:03

わざわざ調べて頂いてありがとうございます! 早速試してみたのですが、どうも反応しません・・・ 行おうとしているのは全てユーザーフォーム上のボタンに対してなのですが、 もしかするとユーザーフォーム上は反応しないのでしょうか? OnKeyというものを知らなかったので勉強になりました! これベースで検索してみます!
jm1156

2016/08/19 08:10

ユーザーフォームでしたか。てっきりシート上からかと思ってました。 ユーザーフォームからならUserForm_KeyPressかUserForm_KeyDownですが、 ボタンなどのコントロールがある場合UserFormにはKeyPreviewプロパティがないので、 すべてのコントロールにKeyDownを埋め込むという荒業になるかも…。
morikawa0208

2016/08/19 08:25

質問の仕方が悪く申し訳ありませんでした。 おかげで私もKeyDownというものまでたどり着きました! ボタン自体はそう多くない(登録削除終了など位)ので、全てに設定していくことにします! 何度もご親切にありがとうございましたm._.m
jawa

2016/08/19 09:01 編集

横から失礼します。 全てのKeyDownを処理する力技とどちらが楽か?という話になりますが、こんな方法もあります。 ⇒コントロールのイベントを共通化 http://thom.hateblo.jp/entry/2016/03/11/204324 参考になれば幸いです。
guest

0

自己解決

どうしてもユーザフォーム上で、対象ボタンがフォーカスされていない状態でも反応させられず、
ひとまずはプロパティのAcceleratorにて対応することにしました。
将来的にはKeyDown等にて、FキーとESCを使った操作にしたい・・・

回答して頂いた皆様ありがとうございました!

投稿2016/08/20 05:05

morikawa0208

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問