結論:Clipboardは「DoCmd.RunCommand」を使うのが一番簡単
Access VBAでクリップボードを扱うなら、
APIや複雑な宣言は不要で、DoCmd.RunCommand を使う方法が最も安全で簡単です。
特に 64bit Access では、
API宣言でハマるより、この方法が確実です。
Accessでコピー処理が面倒に感じる理由
Accessでは、他のOffice(Excelなど)と違い、
Clipboard用の専用オブジェクトがない
APIを使う解説が多い
64bitでエラーになりやすい
といった理由で、
**「コピーするだけなのに難しい」**と感じがちです。
ですが、実は Access標準のコマンド で十分対応できます。
最も簡単なClipboard操作方法(API不要)
基本の考え方
コピーしたいコントロールに値をセット
フォーカスを当てる
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の仕組みに乗るのが正解です。

