- ベストアンサー
VBScriptで図形が選択できない
- VBScriptでエクセルの図形を選択する際に「インデックスが境界を超えています」というエラーが発生して困っています。
- エクセルのマクロでは同じコードを使用して問題なく実現できますが、マクロが含まれないファイル形式で実現したいです。
- OSはWindows7 64bit、Excelは2010を使用しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 手元に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では動きましたが・・・
その他の回答 (2)
- watabe007
- ベストアンサー率62% (476/760)
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
お礼
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)
Transpose関数を使って配列の行、列を入替えてみました。 objExcel.Sheets(1).Shapes.Range(objExcel.Transpose(arrShapeMatched)).Select Excel2002では動きましたが・・・ ちなみにExcelマクロ側でも ActiveSheet.Shapes.Range(Application.Transpose(arrShapeMatched)).Select を行ったところExcel2002では動きました 行列を入替えるのが本来の方法かも??? でした。
お礼
教えていただいた代替案をためしたところ、Excel2010でも無事実現できました。 エラー発生以降、Rangeメソッドがどんなエラーで躓いているのか調べようと、コールスタックが見れるデバッグ環境を用意して…と彷徨っていましたが、結局いいものが見つからず、途方に暮れていました。 また、ご指摘のように、 objExcel.Sheets(1).Shapes.Range(Array("Fig 4","Fig 5","Fig 6")).Select と同等のコードについては、本質問の掲載前に当方でも試し、問題なく動いたため、不思議で仕方ありませんでした。 当面は教えて頂いた代替案で行きます。 もしエラーの真の原因がわかりましたら、教えて下さい。 回答ありがとうございました。