• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBSCriptで図形が選択できません)

VBScriptで図形が選択できない

このQ&Aのポイント
  • VBScriptでエクセルの図形を選択する際に「インデックスが境界を超えています」というエラーが発生して困っています。
  • エクセルのマクロでは同じコードを使用して問題なく実現できますが、マクロが含まれないファイル形式で実現したいです。
  • OSはWindows7 64bit、Excelは2010を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

こんにちは 手元にExcel:2010の環境が無いのでExcel2002で試しましたら objExcel.Sheets(1).Shapes.Range(arrShapeMatched).Select で、"指定したパラメータに無効な値が含まれています。" とエラーが出ました。 objExcel.Sheets(1).Shapes.Range(Array("Fig 4","Fig 5","Fig 6")).Select この様な形では実行されるんですが何故でしょうね そこで代替案ですが For Each sp In objExcel.Sheets(1).Shapes   If InStr(sp.Name, "Fig") >= 1 Then     sp.Select False   End If Next で如何でしょうか? Excel2002では動きましたが・・・

twoflat
質問者

お礼

教えていただいた代替案をためしたところ、Excel2010でも無事実現できました。 エラー発生以降、Rangeメソッドがどんなエラーで躓いているのか調べようと、コールスタックが見れるデバッグ環境を用意して…と彷徨っていましたが、結局いいものが見つからず、途方に暮れていました。 また、ご指摘のように、 objExcel.Sheets(1).Shapes.Range(Array("Fig 4","Fig 5","Fig 6")).Select と同等のコードについては、本質問の掲載前に当方でも試し、問題なく動いたため、不思議で仕方ありませんでした。 当面は教えて頂いた代替案で行きます。 もしエラーの真の原因がわかりましたら、教えて下さい。 回答ありがとうございました。

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

objExcel.Sheets(1).Shapes.Range(objExcel.Transpose(arrShapeMatched)).Select ↑Excel2010でテスト・・・未知の実行時エラーです。 objExcel.Sheets(1).Shapes.Range(objExcel.Index(arrShapeMatched,0,0)).Select ↑Excel2010でテスト・・・OKでした。  Excel2002でもOK

twoflat
質問者

お礼

watabe007様、回答ありがとうございます。 まさかExcel2010でも検討して頂けるとは思っていませんでした。 回答していただいた内容について、こちらの環境でも動作確認し、同じ結果となることを確認しました。 また、追加の状況での動作確認から、現時点では最初に教えて頂いた、 sp.Select False がもっとも汎用性が高い(?)結果となりましたので、Selectメソッドを使おうと考えています。 詳細は以下をご確認ください。 ■追加の状況 ・単独のシェイプを2個追加し、いずれも名前を”Fig”に変更 objExcel.Sheets(1).Shapes.Range(objExcel.Index(arrShapeMatched,0,0)).Select →追加したシェイプはいずれも選択されませんでした。同一の名前を持つ場合、選択できないようです。シェイプそのものを配列に入れているわけではなく、名前だけを配列に入れているので、当然の結果なのかなと思います sp.Select False →追加したシェイプはすべて選択されました。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

Transpose関数を使って配列の行、列を入替えてみました。 objExcel.Sheets(1).Shapes.Range(objExcel.Transpose(arrShapeMatched)).Select Excel2002では動きましたが・・・ ちなみにExcelマクロ側でも ActiveSheet.Shapes.Range(Application.Transpose(arrShapeMatched)).Select を行ったところExcel2002では動きました 行列を入替えるのが本来の方法かも??? でした。

関連するQ&A

専門家に質問してみよう