access PR

Accessでコピー&貼り付けができない原因と対処(フォームのTextBox/ボタン操作でハマるポイント)

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

結論:原因は「フォーカス」「コントロールの状態」「実行コマンド」がほとんど

Accessで「コピーできない」「貼り付けできない」と感じるとき、原因の多くは次の3つです。

  1. コピー対象にフォーカスが当たっていない

  2. TextBox が Enabled / Locked / Visible などの状態で操作できない

  3. 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

それでも動かない時の最短チェックリスト

  1. 対象TextBoxに SetFocus できているか

  2. TextBox は Visible=True / Enabled=True

  3. コピー対象が Nullではないか(必要ならNz)

  4. 貼り付け先が 編集可能か(Locked / AllowEdits)

  5. RunCommand を実行するタイミングでフォームがアクティブか

まとめ

  • Accessのコピー&貼り付けは フォーカスが命

  • SetFocus → SelectAll → Copy が基本形

  • 貼り付けできない時は 貼り付け先の編集可否を疑う

  • 汎用化するとボタンが増えても管理が楽

内部リンク

Accessでよく出る「型が一致しません」エラーの正体

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