access PR

Access VBAでClipboardを扱う最も簡単な方法(64bit対応・API不要)

記事内に商品プロモーションを含む場合があります

結論:Clipboardは「DoCmd.RunCommand」を使うのが一番簡単

Access VBAでクリップボードを扱うなら、
APIや複雑な宣言は不要で、
DoCmd.RunCommand を使う方法が最も安全で簡単です。

特に 64bit Access では、
API宣言でハマるより、この方法が確実です。


Accessでコピー処理が面倒に感じる理由

Accessでは、他のOffice(Excelなど)と違い、

  • Clipboard用の専用オブジェクトがない

  • APIを使う解説が多い

  • 64bitでエラーになりやすい

といった理由で、
**「コピーするだけなのに難しい」**と感じがちです。

ですが、実は Access標準のコマンド で十分対応できます。


最も簡単なClipboard操作方法(API不要)

基本の考え方

  1. コピーしたいコントロールに値をセット

  2. フォーカスを当てる

  3. Accessの「コピー」コマンドを実行

これだけです。


例:TextBoxの内容をClipboardにコピーする

Private Sub cmdCopy_Click()

‘ コピーしたいTextBox
Me!Text0.SetFocus

‘ 全選択
DoCmd.RunCommand acCmdSelectAll

‘ コピー
DoCmd.RunCommand acCmdCopy

End Sub

✔ API不要
✔ 32bit / 64bit 両対応
✔ 失敗しにくい

フォーカスが重要な理由

Accessの RunCommand は、

👉 「現在フォーカスがあるコントロール」

に対して動作します。

そのため、

  • SetFocus をしない

  • 非表示コントロールを対象にする

と、コピーできません。

「必ずフォーカスを当てる」
これが最大のポイントです。


フォーカスを移したくない場合は?

「画面上のフォーカスを移動させたくない」
という場合も多いですが、

👉 完全にフォーカスなしでコピーする方法はありません

Accessの仕様上、
コピー操作=フォーカス前提です。

現実的な回避策

  • 一瞬フォーカスを当てる(体感では分からない)

  • TabStop を False にして見た目を崩さない

  • コピー専用の非表示TextBoxを使う


64bit Accessでの注意点

よくある失敗がこちらです。

❌ API宣言をそのままコピペ
❌ PtrSafe の書き忘れ
❌ Long / LongPtr の違い

今回の方法なら、
64bit特有の問題は一切発生しません。


よくある失敗例

コピーできない時のチェック

  • SetFocus しているか

  • TextBox が Enabled = True か

  • フォームがアクティブか

この3点で 9割解決 します。

Access VBAでコピー処理を実装する際、「型が一致しません」エラーに遭遇するケースも多くありますが、原因のほとんどは Nullやデータ型の混在です。
👉 Accessでよく出る「型が一致しません」エラーの正体と対処法はこちら


応用:文字列を一度セットしてコピーする

直接コピーできない値は、
一度 TextBox に代入してからコピーします。

Me!Text0.Value = “コピーしたい文字列”
Me!Text0.SetFocus
DoCmd.RunCommand acCmdSelectAll
DoCmd.RunCommand acCmdCopy

まとめ

  • AccessでClipboardを使うなら RunCommandが最短

  • API不要・64bit対応

  • フォーカスが最重要ポイント

  • コピーは「Access標準機能」で十分

👉 難しく考えず、Accessの仕組みに乗るのが正解です。