2019年6月現在、VBAからクリップボードに大きなデータをコピーした状態で、Excelを保存せずに終了しようとすると、「図が大きすぎます。入りきらない部分は切り捨てられます。」というメッセージが出ることがあります。発生を確認した環境はWindows 10/Excel 2016です。
このメッセージ、図がひとつもなくても出るので、バグといってよさそうです。放置しても、とくに何も起こらないようなので、実害はありません。でも、何度も表示される場合もあって面倒だし、切り捨て御免とは穏やかでない。
現在、2つの対処方法が提案されています。
- オプションを変更:ファイル→オプション→詳細設定→「切り取り、コピー、貼り付け」グループの、「挿入したオブジェクトをセルと共に切り取り、コピー、並べ替えを行う」オプションのチェックを外す。
- クリップボードを消す:VBAでクリップボードを消すコードを追加する
オプションを変更する方法は、自分の環境では有効ですが、他の人に使ってもらう場合は難しいです。また、副作用もあります。クリップボードを消す方法は、WindowsのAPIを操作する必要があるのでやや高度です。
そこでもうひとつ、クリップボードに大きいもんがあったらあかんゆうんやったらなんでもええから小さいもんいれといたらええやん、というチープな回避策を考えてみました。
somethingBig.copy(target) 'クリップボードに大きなオブジェクトを格納する処理
Range("A1").copy 'ActiveSheetのA1セルをクリップボードにコピー(バグ回避)
Range("A1")
はActiveWorksheetのA1セルです。[A1]
と書いてもいいです。もちろんA1でなくてもどこのセルでもOKです。
なお、値だけをコピーする場合など、そもそもクリップボードを使わなくていい書き方が可能であればそのほうが速いので、それにこしたことはないです。