Microsoft Access 2013で作成したアプリに機能を追加した時のお話。
レコードを複製するマクロを実行した後、確認メッセージが毎回表示された事を回避する方法をメモ。
時間が経てば絶対に忘れる自信がある内容ですね・・・
コマンド ボタン ウィザードの[レコードの複製]を使ったところ・・・
Accessは簡単な帳票ツールとしてよく使います。標準機能のコマンドボタンを配置するとclicked_event用テンプレートが表示され、任意の機能を割り当てられます。
ここまでは問題ありませんが、[レコードの複製]を選択し、実際に使うと
クリップボードにコピーされているデータが多すぎます。のメッセージがコピー後の行う他動作時に毎回表示されます。
データをクリップボードにコピーすると、オブジェクトに対する参照だけがコピーされます。
ソースドキュメントを閉じると、ソースからすべてのデータが張り付けられます。
データに量によっては、時間がかかる場合があります。
このデータをクリップボードに保存しますか?
INSERT SELECTのクエリを作成した方が簡単だと思いましたが、「あえて」この状況からメッセージを出さない方法を調べて使ってみました。
先人の方々に感謝!
なお、Win32APIを使います。必ずmsdnで各内容を把握してから使いましょう。
クリップボードを空にする関数
Option Compare DatabaseDeclare Function OpenClipboard Lib "User32" (ByVal hWnd As Long) As Long
Declare Function EmptyClipboard Lib "User32" () As Long
Declare Function CloseClipboard Lib "User32" () As Long
Public Function setEmtpyClipBoard()
OpenClipboard (0&)
EmptyClipboard
CloseClipboard
End Function
マクロの登録
こんな感じです。埋め込みマクロにマクロを追加
[レコードの複製]の埋め込みマクロを開き、最後部にマクロを追加埋め込みマクロは一度も使ったことがなかったので、スマートさがないなと実感。
今のところ問題なく動作していますが、もう少し修行が必要かもしれませんね。。。
xxxClipboard関数のリファレンスとその他
- OpenClipboardのリファレンス
http://msdn.microsoft.com/ja-jp/library/cc430068.aspx - EmptyClipboardのリファレンス
http://msdn.microsoft.com/ja-jp/library/cc429768.aspx - CloseClipboardのリファレンス
http://msdn.microsoft.com/ja-jp/library/cc429781.aspx - 0&の”&”とは
OpenClipboard(0&)の0&の&はVBのデータ型Longを示すようです。
http://www5b.biglobe.ne.jp/~yone-ken/VB/datatype.html - 0&の”0”とは
0は最前面のウィンドウを検索するようです。
http://www.moug.net/tech/acvba/0050034.html
まだまだ分からない事ばかりですな~精進精進・・・