実行時エラー1004「指定された値は境界を超えています」
Shapesプロパティ配下のAddPictureメソッドのエラー対策記事です。
表題の様なエラーが出た方に向けて記事を用意しました。
「指定された値は境界を超えています」とのこと。
実行時エラーですのでコード自体は間違っていませんがなぜか実行出来ないようです。
具体的には以下画像のようなコードを書いた際エラーダイアログが立ち上がります。
引数のLinkToFileとSaveWithDocumentが両方共Falseの時にこのエラーが発生します。
※画像内の「6_画像を取得・・・」から始まるコメントは無視してください。
回避する方法は引数の組み合わせを変えることです。以降でさらに解説します。
関連記事
こちらの記事でAddpictureメソッドを使ったコードを紹介しています。
階層構造をもつフォルダから特定のキーワードを持った画像をExcelに取り出すというコードです。
関連記事VBAで画像を取り込む画像自体を取得する方法を紹介 作業高速化
エラーになるコード
コードとしてはLinkToFileとSaveWithDocumentが共にFalseの際エラーになります。
エラーになる理由
短く言うと「2つの引数の指示が矛盾している為」です。
まずは第2引数のLinkToFileと第3引数のSaveWithDocumentについて簡単におさらいします。
LinkToFile
Trueの時はリンク付きの画像が用意されます。
エクセルを起動する度に元データを読み込める様になります。
Falseの時は元データからコピーされた独立した画像だけを取得します。
説明した通りですが表にしてみます。
番号 | True or Talse | 状態 |
---|---|---|
1 | True | リンク先の画像を表示するという状態が用意されます |
2 | False | 元データからコピーされた独立した画像が用意されます |
SaveWithDocument
Trueは画像を保存、Falseはリンクを保存です。
こちらも表にしてみましょう。
番号 | True or Talse | 状態 |
---|---|---|
1 | True | 取得した画像は独立した画像としてデータを保存します |
2 | False | 取得した画像はあくまでリンク先の画像としてデータを保存します |
状況からエラーになる理由を考える
エラーになる理由としては「引数が矛盾している」事が想定されます。
両方の引数がFalseという事は以下のような状態です。
各引数の説明の時に表を作っておいたので見ながら読んでいただくと理解が進みます。
- LinkToFileで独立した画像だけの情報という指示をしている。
- SaveWithDocumentでリンク情報を持ったまま保存しようとしている。
よって矛盾が起きています。
エラーメッセージとのつながり
何でこのメッセージなのかは最後まで分かりませんでした。
但し実行時エラーという事なのでコードとしては間違っていません。(使える引数を使っている)
コードが成り立たないという事です。
よって「引数が矛盾している」という仮説ともつじつまが合います。
エラーメッセージは共用です。
他のエラーでも使うので実体とワードが合ってない事はよくありますのでここは流します。
まとめ(エラー対策記事の紹介)
対策は「2つの引数で共にFalseを使わないように」となります。
これで終わりですがもう少し具体的に使い分けを解説しないとどうしたら良いのか分かりません。
説明用に別記事を用意しました。
LinkToFileとSaveWithDocumentの引数の組み合わせを変えてコードを実行しています。
マトリクスで見やすく結果を掲載しています。
おすすめの使い方も紹介していますので是非ご覧ください。