[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『選択されている図形の数を数えるには』(x11euser)
図形をいくつか選択した状態で、
SUB TEST MSGBOX SELECTION.COUNT END SUB
を実行すると、選択されている図形の数を表示できます。 しかし、選択されている図形が1つの場合、 実行時エラー'438' オブジェクトはこのプロパティまたはメソッドをサポートしていません。 というエラーになってしまいます。 選択されている図形が1つだけのときも正しい答えを求めるにはどうしたら いいのでしょうか。 EXCEL2003、WINDOWSXPで作業しています。
>しかし、選択されている図形が1つの場合、 >実行時エラー'438' 原因は解りません。 If TypeName(Selection) <> "Range" Then MsgBox Selection.ShapeRange.Count End If とか。 BJ
確かに、Selection.ShapeRange.Countで調べれば正常に 答えが返ってきますね。
>しかし、選択されている図形が1つの場合、 >実行時エラー'438' >オブジェクトはこのプロパティまたはメソッドをサポートしていません。 Selectionというプロパティが図形を複数選択したときは、 DrawingObjectsというコレクションを返し(Countプロパティを持っている)、 図形を一つ選択したときは、個々の図形オブジクト(OvalやRectangle等)を 返すためです(Countプロパティを持っていない)。 よって、一つ図形を選択したSelectionの場合、Countプロパティを持っていないため エラーになります。
新規ブックの標準モジュールに
'================================================================== Option Explicit Sub sample1() Dim shp As Shape Dim r As Range Set r = Range("c3") Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, r.Left, r.Top, r.Width, r.Height) shp.Select Set shp = Nothing Set r = Nothing End Sub Sub sample2() Dim r As Range Set r = Range("c10") With ActiveSheet.Shapes .AddShape msoShapeOval, r.Left, r.Top, r.Width, r.Height .SelectAll End With Set r = Nothing End Sub Sub test() MsgBox TypeName(Selection) End Sub
まず、Sample1を実行してください。四角形が作成され、その図形を選択しています。
この状態でtestを実行してみてください。
Rectangle と表示されます。Rectangleというオブジェクトには、 Countプロパティは、ありません。
続けてSample2を実行してください。 今度は、楕円も作成され、四角形と楕円の二つを選択します。
この状態で再び、testを実行してください。 今度は、DrawingObjects と表示されます。
ということで、Selectionで返されるオブジェクトが違うことがエラーになる原因です。
対処方法は、BJさんの記述のようにShapeRangeというコレクションを作成することによって、 図形が一つの選択時にもCountプロパティを使用可能にする方法がよさそうですねえ。
ichinose
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.