DataObjectのエラーでは、参照設定の問題と、クリップボードの読み書きで失敗した場合を分けます。遅延バインディングへ書き換えるだけで、必要な部品や環境の問題がすべて解消するわけではありません。
目的がExcel内の値の転記なら、クリップボードを使わずにセルへ直接代入できます。別アプリへ文字列を渡す処理とは、必要な実装を分けて考えます。
ADVERTISEMENT
1. 止まった行とエラーを記録する
コンパイル時にDataObjectの型を認識できないのか、オブジェクト生成で失敗するのか、GetFromClipboardなどの実行中なのかを確認します。エラー番号と文面、Excelの32・64ビット、対象のPCを控えてください。
「Outlookが入っていないから」といった一つの理由に決め付けず、参照不可のライブラリやOfficeの構成を調べます。配布元と配布先で差があるなら、それぞれの状態を比較します。
2. 参照設定を確認する
VBEの「ツール」→「参照設定」で「参照不可」がないか確認します。MSForms.DataObjectを型として宣言するコードでは、Microsoft Formsのライブラリが必要です。利用していない参照かどうかも、コードを確認して判断します。
UserFormを追加すると関連する参照が追加される場合がありますが、壊れた環境を必ず修復する方法ではありません。不明なDLLを外部サイトから取得して登録する対処は避け、Officeの管理担当者へ確認します。
3. 値の転記なら直接代入する
同じブックの「入力」シートA1を「出力」シートB2へ値として渡す例です。出力先を上書きするため、コピーしたブックで空の出力先を使って確認してください。
Sub TransferValue()
Dim wb As Workbook
Set wb = ThisWorkbook
wb.Worksheets("出力").Range("B2").Value2 = _
wb.Worksheets("入力").Range("A1").Value2
End Sub
ThisWorkbookはコードを保存したブックです。個人用マクロブックなどに置く場合は、対象ブックの指定を変える必要があります。この例は値の転記であり、数式や書式、別アプリへの貼り付けを再現するものではありません。

4. 遅延バインディングにも依存先は残る
CreateObjectで実行時に生成する形にしても、対象のCOM部品が利用できることは必要です。参照設定を省けることと、実行環境に依存しないことは別です。
htmlfileのClipboardDataを使う例も、MSHTMLやセキュリティ設定へ依存します。どのPCでも使える標準の代替として配布せず、対象環境での対応と管理方針を確認します。
5. Windows APIには所有権と後処理が必要
Windows APIを使う場合は、開く処理の成功確認、メモリ確保、文字列終端、書き込み失敗時の解放、クリップボードを閉じる後処理が必要です。ポインターやハンドルの宣言は32・64ビットに合わせます。
OpenClipboardへNULLを渡した後にEmptyClipboardを呼ぶと、所有者がNULLになりSetClipboardDataが失敗する条件があります。また、書き込み成功後はメモリの所有権がシステムへ移るため、同じ領域をアプリ側で解放してはいけません。
6. 用途に合わせて方式を選ぶ
| 目的 | 確認する方式 |
|---|---|
| Excel内の値の転記 | Range.Value2などの直接代入 |
| セルの書式も移す | Range.Copyなど、対象と貼り付け内容を指定 |
| 別アプリへの文字列受け渡し | DataObjectや対象環境で検証したAPI実装 |
APIを選んだだけで互換性や安定性が最も高くなるわけではありません。Windows専用かどうか、保守できる担当者がいるかも判断材料です。
7. 配布先で文字と失敗時の動作を確認する
空文字、日本語、改行を含む文字列、ほかのアプリがクリップボードを使用中の状態で確認します。失敗を握りつぶさず、利用者に再試行や中止が分かる形で返してください。
仕様はMicrosoftのRange.Value2、GetFromClipboard、SetClipboardDataで確認できます。
超解決 Excel・Word研究班
企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。
Office・仕事術の人気記事ランキング
- 【PDF】EdgeでPDFを開くと印刷できない・プリンタ一覧が出ない時のブラウザ再起動とシステムダイアログ
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【Excel】オートフィル(右下の+)が効かない!ドラッグできない時のオプション有効化設定
- 【Outlook】メールの受信が数分遅れる!リアルタイムで届かない時の同期設定と送受信グループ設定
- 【Word】差し込み印刷の金額にカンマを付ける方法|小数・0・空欄の確認
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】入力した文字のフォント・サイズ・色を変更する方法|注釈とフォームの違い
- 【Outlook】メール送信時にエラーになる「送信不能」の原因切り分け
- 保存せずに閉じたExcel・Wordを復元する方法|自動回復・未保存ファイル・履歴の確認
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
