MS Access Tips/Sample and VBA and Blog customize etc...

フォーム上でコピー禁止

フォーム上にサブフォームでデータシートを使用しています。このデータシート上からのコピー(Ctrl-Cや右クリックでのコピー)を禁止したいのですが、禁止したいのはデータシート全体を選択、もしくは行や列全体を選択しているときにコピーを禁止し、個別フィールド上でのコピーは許可したいと思っています。

とある掲示板での質問です。コピーを全て禁止にすると使い勝手が悪いので、複数のデータを選択しているときだけコピーを禁止したいということですね。このような要望はけっこうありそうです。

難易度:

選択範囲のサイズは、SelHeight、SelWidth プロパティで取得できます。これを利用して複数データを選択しているか判断できます。

Ctrl+C でのコピーは、フォームのキークリック時に下記のコードで抑止できます。フォームの「キーボードイベント取得」は「はい」にしておきます。

ショートカットからのコピーは、マウスボタンクリック時に「ショートカットメニュー」プロパティをON/OFFします。

標準モジュールに下記の関数を作成します。

フォームのデザインビューですべてのテキストボックスを選択して、「マウスボタンクリック時」の欄に、
=HideShortCut()
と設定します。

また、フォームの「マウスボタンクリック時」にも、同様に設定します。

以上で、複数範囲のデータが選択されているときは、Ctrl+C と 右クリックではコピーできません。ただし、メインメニュー(リボン)からはコピーできますので、メインメニュー(リボン)は表示にしておく必要はあります。AutoExecマクロか起動時に開くフォームで下記のコードを実行すれば非表示にできます。

AC2007以降

AC2003以前

サンプルファイルが下記からダウンロードできます。
FrmNoCopy_07.zip (Access 2007 形式 - 95kb)
FrmNoCopy.zip (Access 2002-2003 形式 - 95kb)
FrmNoCopy_2k.zip (Access 2000 形式 - 94kb)


拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/319-d1ce99f3
該当の記事は見つかりませんでした。