[[20190129175047]] 『全てのショートカットを無効』(ショートカット) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『全てのショートカットを無効』(ショートカット)

EXCELで、すべてのショートカットを無効にする方法はありますか?
あれば教えてください。vbaでも可。

( F1 や Ctrl+A など、出来る限り押しても何もならない様にしたいです)
目的はある特定のユーザーに対して誤動作を防止する為です。

vbaでApplication.Onkey・・・ を使用しての方法がある事は知っていますが1つずつ設定するのは大変なので質問させていただきました。

よろしくお願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 回答ではないし、やり方もわかりませんが
 本質はなんですか?
 F1はヘルプだし、Ctrl+Aは全選択だから、害は無さそうですけど

(稲葉) 2019/01/29(火) 18:41


どちらもAPIを使う難しい案ですが、2つ思いつきます。

1つは、Windowsのキー入力をフックして、CTRLキーとかALTキーとか、入力されたキーを判定し、押していなかった事に変えて返す事。

もうひとつは、キーボードのマトリクスを書き換えて、CTRLキーとかALTキーとか押されても、Shiftキーとかが押された事にして、本来のショートカットとして機能しないようにする事。 任意のキーを入れ替えるアプリとかありますよね? それをマクロでやってしまう訳です。

どちらもシステムに干渉するAPIを駆使する事になるので、危険です。(まぁ、入力操作ができなくなったり、フリーズしたりするだけで、ドライブを壊すような事にはなりませんが) 興味があれば、自己責任で調べてみてください。 Excel VBAで実現する人はあまり居ないように思いますが、C言語等のAPI使用例を元に試行錯誤してみると良いでしょう。
(???) 2019/01/30(水) 09:27


稲葉様

コメントありがとうございます!
Excelの事が分かっている人にとっては何も問題ないのですが、現在Excel内で50名くらいの小・中学生がそれぞれログインして使うシステムを作り運用中です。大人が見ていない所でもできる限り予想外の事が起こらないようにしたい為です。殆ど無人で運用できているのですがたまに知らず知らず何か押してしまうんです。子供なのでヘルプが出てきただけでもどうすればいいかわからないのでそこで大人の手間がかかるのでそれを回避したいです。

access使えという事は置いといて、Excelで済む方法があれば良いなと思い質問させていただきました。
(ショートカット) 2019/01/30(水) 19:22


???様ありがとうございます!

APIの話になってしまいますよね!ありがとうございます!
ちょっと自分なりに調べてできそうであれば頑張ってみます!

貴重な情報ありがとうございます!大変助かりました!
(ショートカット) 2019/01/30(水) 19:25


キー入れ替えソフトで、押されたくないキーを無効化すればどうですか。

レジストリを書き換えてキーを入れ替えるので設定したPCではExcelに限らずすべて無効になりますが、
小・中学生に自由に触らせるなら、その方がいいかも。

例えば、下記のようなソフト。

「Change Key」非常駐型でフリーのキー配置変更ソフト - 窓の杜
https://forest.watch.impress.co.jp/library/software/changekey/

ご参考までに。
(hatena) 2019/01/30(水) 20:26


 今は小中でエクセルさわる時代なんですねえ

 APIやソフトで対応したとして、今度はそっちがトラブった時のほうが怖いです
 エクセルでどういうお勉強かわかりませんが、ショートカットキーの使い方教えたほうが
 今後の役に立つんじゃないかなあ

 歩き回るのが手間なら、リモートデスクトップ構築もありですね!
(稲葉) 2019/01/31(木) 07:10

小学生前なら、キーボードの代わりに画面上にソフトウェアキーボードのようなものを表示させ、ショートカット的なものを排除したアプリを作って対応、とかも考えられますが、小中学生対象ならば、キー無効なんて考えず、ありのまま使わせて良いのではないかと思います。

F1押したらヘルプが出る、とか、意固地になりがちな成人と違って、柔軟な子供は経験すれば覚える事でしょう。(包丁持たせると手を切って危ないからプラスチックの包丁を持たせる、なんてするより、普通の包丁を持たせて、危険性を認識させるべきというのと同じ考え)

そして、APIでの実現はかなり難しいと思いますし、Application.Onkeyでの実現は、例えばF1キーを無効にしても、セルをダブルクリックしてからのF1キーだとヘルプがでてしまう、とかもあるし、ショートカットなんて無数にあるし、完全にはいかない事でしょう。
(???) 2019/01/31(木) 10:44


上で紹介したキー入れ替えソフトでやっていることは、
レジストリを書き換えているだけなので、
同じことをVBAでやろうと思えばできます。

↓参考リンク

■T'sWare Access Tips #283 〜任意のレジストリキーにアクセスするには?〜
https://tsware.jp/tips/tips_283.htm

Windows/TIPS/レジストリを修正してCAPSLOCKの割り当て変更 - yanor.net/wiki
http://yanor.net/wiki/?Windows/TIPS/%E3%83%AC%E3%82%B8%E3%82%B9%E3%83%88%E3%83%AA%E3%82%92%E4%BF%AE%E6%AD%A3%E3%81%97%E3%81%A6CAPSLOCK%E3%81%AE%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E5%A4%89%E6%9B%B4
(hatena) 2019/01/31(木) 17:33


hatena様

すばらしいご提案、ありがとうございます!
教えて頂いた、
「Change Key」非常駐型でフリーのキー配置変更ソフト - 窓の杜
で、問題が解決しそうです!感謝します!

ただ、
Windows/TIPS/レジストリを修正してCAPSLOCKの割り当て変更
というのも全く知らなかったので勉強の為に触ってみようとも思います!

大変助かりました!ありがとうございました!
(ショートカット) 2019/02/01(金) 21:21


稲葉様、???様

ありがとうございます!
そうですね!本当はショートカットなども覚えながらやる方が、仰るように今後の役に立つと思います。
それも考えたのですが、今はPCやExcelの勉強というよりは、簡単な四則計算をタイムアタックの様に秒数を競ったりクリアするとレベルがあがったりして、勉強が嫌いな子でもゲームの様に楽しく計算力を上げるのが目的でございます。
基本的にスピードを競って遊びながら計算するものですので、焦って変な所を押してしまうんですね。どうでもいいですが作った自分より計算&タイピングが早くなった小学生もいます(笑

numの数字しか押さないのにF1押したりするのは意味が分からないですがたまにあるんです。
そして、今は計算だけですが、予想以上に反響がいいので英単語バージョンも作ろうと思っていますのでそうなるとさらに誤打が増えそうです。Excelでやる事自体間違っていると言われれば元も子もないですが他の知識が無いので(泣

できる子は何の細工もしなくていいのですが、PC自体初めて触る子などは最初にややこしいなとか難しいな等の感覚をなるべく与えたくないというのがございまして、対策を質問させていただきました。

大変参考になりました!ありがとうございます!
(ショートカット) 2019/02/01(金) 22:03


>簡単な四則計算
ということなら、逆に入力するキーを限定する方法もあります。

以下はざっくりですが、
テンキーの 0-9
BS,DEL,Enter
カーソルキー
の入力のみを前提とするコードです。
尚 終了は ESCキーです。

ユーザーフォームを追加し、以下のコードを貼り付けてください。
Private Sub UserForm_Initialize()

    Me.StartUpPosition = 0
    Me.Left = 0 - Me.Width - 10
End Sub

Private Sub UserForm_Keydown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    If Shift > 0 Then Exit Sub
    With ActiveCell
        Select Case KeyCode
            Case 96 To 105:   .Value = .Value & CStr(KeyCode - 96) '0 〜9

            Case 38: .Offset(-1, 0).Select '上
            Case 40: .Offset(1, 0).Select  '下
            Case 37: .Offset(0, -1).Select '左
            Case 39: .Offset(0, 1).Select  '右

            Case 8:  If .Value <> "" Then .Value = Left(.Value, Len(.Value) - 1) 'BackSpase
            Case 46: .ClearContents       'Delete
            Case 13: .Offset(1, 0).Select 'Enter
            Case 27: Unload Me            'ESC
        End Select
    End With
End Sub

尚 完全にニーズを満たす動作ではないので、お試し程度で。

(チオチモリン) 2019/02/02(土) 23:52


チオチモリン様

ありがとうございます!

そんな方法もあるのですね!凄いです!
知識足りず、なぜユーザーフォームを使うのかわからないですが、勉強させていただきます!

(ショートカット) 2019/02/04(月) 19:59


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.