結論:原因は「フォーカス」「コントロールの状態」「実行コマンド」がほとんど
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不要)
この記事以外にも、Access VBAでよくあるトラブルと解決方法をまとめた記事があります。
👉 Access VBAでよくあるトラブルと解決方法まとめ