[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『選択されている図形の数を数えるには』(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.