結論:原因は「フォーカス」「コントロールの状態」「実行コマンド」がほとんど
Accessで「コピーできない」「貼り付けできない」と感じるとき、原因の多くは次の3つです。
コピー対象にフォーカスが当たっていない
TextBox が Enabled / Locked / Visible などの状態で操作できない
VBAの処理が RunCommand前提なのに条件が満たせていない
Accessは、Excelのようにセルを直接触る感覚ではなく、
“今アクティブなコントロールに対してコマンドが実行される” という仕様が強いです。
よくある症状
コピーボタンを押しても、何も起きない
クリップボードに入らない(別アプリに貼れない)
「貼り付け」だけできない
エラーは出ないが動かない
特定のTextBoxだけコピーできない
原因①:フォーカスが当たっていない(最重要)
DoCmd.RunCommand のコピー・貼り付け系は、基本的に
👉 現在フォーカスがあるコントロール
に対して実行されます。
つまり、ボタンを押した直後は ボタンにフォーカスがあることが多く、
そのまま acCmdCopy を実行してもコピーされません。
対処:必ず SetFocus する
Private Sub cmdCopy_Click()
Me!Text0.SetFocus
DoCmd.RunCommand acCmdSelectAll
DoCmd.RunCommand acCmdCopy
End Sub
原因②:TextBox の状態(Enabled / Locked / Visible)
コピーできない時は、対象TextBoxのプロパティも疑います。
チェックするポイント
Enabled:True か
Locked:Trueでも表示コピー自体はできることが多いが、状況により影響
Visible:False だと当然操作できない
TabStop:Falseでもコピーは可能(ただしSetFocusできないケースがある)
まずは一時的に、対象TextBoxを
Visible=True
Enabled=True
にして動作確認すると原因の切り分けが速いです。
原因③:Null(未入力)をコピーしようとしている
TextBoxが未入力(Null)の場合、コピー自体が期待通りにならないことがあります。
「空欄でもコピーしたい」なら、Nullを空文字に寄せるのが安全です。
Me!Text0.Value = Nz(Me!Text0.Value, “”)
Me!Text0.SetFocus
DoCmd.RunCommand acCmdSelectAll
DoCmd.RunCommand acCmdCopy
原因④:貼り付けができない(入力規則・書き込み不可)
貼り付け側で詰まる典型はこれです。
貼り付け先が Locked=True
フォームが 編集不可(データ入力不可)
レコードが新規作成できない(AllowAdditions=False など)
入力規則(Validation Rule)で弾かれている
貼り付け前に、貼り付け先TextBoxへフォーカスを当ててから実行します。
Private Sub cmdPaste_Click()
Me!Text1.SetFocus
DoCmd.RunCommand acCmdPaste
End Sub
実用:指定したTextBoxの内容を「確実にコピー」する関数化
ボタンを増やすほど同じコードが増えるので、汎用化すると楽です。
Public Sub CopyTextBoxValue(frm As Form, ctrlName As String)
On Error GoTo ErrH
frm.Controls(ctrlName).SetFocus
DoCmd.RunCommand acCmdSelectAll
DoCmd.RunCommand acCmdCopy
Exit Sub
ErrH:
MsgBox “コピーできませんでした: ” & Err.Description, vbExclamation
End Sub
呼び出し側:
Private Sub cmdCopy_Click()
CopyTextBoxValue Me, “Text0”
End Sub
それでも動かない時の最短チェックリスト
対象TextBoxに SetFocus できているか
TextBox は Visible=True / Enabled=True か
コピー対象が Nullではないか(必要ならNz)
貼り付け先が 編集可能か(Locked / AllowEdits)
RunCommandを実行するタイミングでフォームがアクティブか
まとめ
Accessのコピー&貼り付けは フォーカスが命
SetFocus → SelectAll → Copyが基本形貼り付けできない時は 貼り付け先の編集可否を疑う
汎用化するとボタンが増えても管理が楽
内部リンク
Access VBAでClipboardを扱う最も簡単な方法(64bit対応・API不要)

