2022年9月5日月曜日

これはこうなる、あれはこうなると想定外の操作に思いを巡らせて、マウスの操作を制限するしかなくなった ー クリックイベント(エクセルVBA)

テキストボックスもシェイプの仲間
         
タックシールをエクセルで印刷するアプリでは、セルにデータを表示しません。
全くセルを使用しないと言ってもよく、代わってテキストボックスの多用です。

なので、マウスでセルをクリックして取得させる気もないので、封じ込めたい。
しかも、テキストボックスをクリックしてしまえば、選択できてしまいますな。

勝手に入力されたり、ボックス自体の位置もずれるとシール位置から外れます。
もちろん、データはVBAでボックスに流し込めるように、プログラムしました。

しかも、操作の実行はみなコマンドボタンだから、シートは単なる印刷領域ね。
こうなると、マウスでクリックしたイベントを無効にするような仕掛けが必要。

例えば、どのセルでもクリックすると、セルの"A1"だけに飛んじゃう工夫とか。
テキストボックスも同じように、クリックしても特定のセルに飛ばしてしまう。

ただ、セルを縦に動かして、シートの印刷領域がスクロールできるといいかな。
アイデアをネットで探したりして、色々とひねり出してみた結果が次のコード。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.Intersect(Target, Columns(”A”)) Is Nothing Then
Range("A1").Select
End If
End Sub

このプロシージャを必要なシートモジュールに記述すると、あーら不思議です。
セルがA列しか移動できなくて、他の列へ移動させようとすると"A1"に戻るの。

これと似たような考えで、テキストボックスを選択した時のイベントも考えた。
先ず、テキストボックスを作って、マウス右クリックで”マクロの登録”を選択。

すると、新しいモジュールの中に実行コードの無いプロシージャの出来上がり。
次に、この中にセルの”A1”を取得するコード一行を書き込んでおけば、OKだ。

クリックしても選択されず、”A1”が常に取得されるという事実上のロック状態。
こうして、マウスクリックで不要なイベントは、ブロックできたのでめでたし。

Sub TextBox1_Click()
ActiveSheet.Range("A1").Select
End Sub

というわけで、ちょっとの小技でもタックーシート印刷の画面で操作性が向上。
このタックシート印刷は、勤め先に出入りする常駐業者に使わせて業務改善をさせる予定なので、ちょっとでも想定外の触り方で、とんでもない挙動が起きてしまうのは、絶対避けておきたいと思った自分なのでした。

おまけ:
以上は、左クリックならOKでも、右クリックのイベントは効かないのが残念だ。
シートをロックしながらコマンドボタンを押せたりする工夫は、次の投稿でね。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿