[[20101227144026]] 『選択されている図形の数を数えるには』(x11euser) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『選択されている図形の数を数えるには』(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

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.