#702 サブフォームの全レコードをクリップボードにコピーする方法 フォーム、VBA

サブフォームに現在表示されている全レコード(フィルタが掛かっていればその結果のデータ)を、ボタンの1クリックでクリップボードにコピーする方法です。

マニュアルでそのような操作を行うには、
  1. サブフォームにフォーカスを移動
  2. 全レコードを範囲選択
  3. 右クリックのメニューやCtrl+Vの操作で[コピー]を実行
という手順を踏みます。

ここでは、DoCmdオブジェクトのRunCommandメソッドを使って、ちょうどマニュアルでそのような操作を行ったときと同じ手順を、プログラムで順番に再現します。

次の例では、フォーム上の[全コピー]ボタン(名前は「cmd全コピー」)のクリックによって、サブフォーム「frm商品マスタ_sub」に対してそれら一連の処理を行っています。

Private Sub cmd全コピー_Click()
'[全コピー]ボタンクリック時

  On Error Resume Next
  '再描画を停止
  Echo False
  'サブフォームにフォーカスを移動
  Me!frm商品マスタ_sub.SetFocus
  'すべてのレコードを選択
  DoCmd.RunCommand acCmdSelectAllRecords
  '[コピー]を実行
  DoCmd.RunCommand acCmdCopy
  'フォーカスをこのボタンに戻す
  Me!cmd全コピー.SetFocus
  '再描画を再開
  Echo True

End Sub

ここで、
  • 「Echo False」で再描画を停止しているのは、サブフォームの全レコードが選択されて反転表示になる様子(画面のちらつきのような表示)をユーザーに見せないようにするためのものです。
  • また、プログラムの途中で何らかのエラーが発生した場合でも、最後の「Echo True」を実行させるために、「On Error Resume Next」で途中で発生したエラーを無視するようにしています。より厳格にするのであればエラールーチンを記述した方がよいかもしれません。
  • 最後に[全コピー]ボタンにフォーカスを戻していますが、データ処理上は不要です。ここではサブフォームの全レコードが反転表示になっている状態を見せないために行っているだけです。

実行前:Accessの画面


実行後:Excelのワークシートに[貼り付け]を行ったところ
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved