シートに 1 つのグラフと 5 つの四角形があり、Excel 2003 を使用しています。
最初に長方形を選択してからグラフを選択すると、(1) コードはエラーなしで機能します。期待どおり、選択した 2 つの図形の名前が返されます。
最初にグラフを選択してから四角形を選択すると、グラフが両方とも選択された図形であるかのように、グラフが 2 回返されます。これはバグだとしか思えません。しかし、選択を変更せずにコードを再度実行すると、最初に長方形を選択した場合と同じ結果が返されるため、奇妙なバグです。奇数。
選択されている図形が 1 つ未満の場合は、範囲が選択されていることを意味します。Excel では常に何かが選択されているため、図形が選択されていない場合は、Selection オブジェクトが Range オブジェクトを参照している可能性があります。使用できます
Typename(Selection)
選択されたものを決定します。Range が選択されていて、その範囲に名前が定義されていない場合、Name プロパティはエラーを返します。
Excel で「グラフの形」を選択することは非常に困難 (不可能?) です。グラフを単独で選択する場合は、選択ポイントを確認してください。それらは黒い四角です。コントロールキーを押しながら別の図形を選択します。チャート上の選択ポイントが白い円に変わります。単独で選択されている場合、Selection オブジェクトは実際には ChartArea オブジェクトです。Excel は、グラフを選択するときに、実際にはグラフのコンポーネント (既定では ChartArea) を選択する必要があると "推測" します。ChartArea には ShapeRange プロパティがないため、エラーが発生します。
最初に想定されるバグについては、それを証明するコードを次に示します。3 番目のセクションでは、Typename を確認していますが、何もしていないことに注意してください。これは、実際に何が選択されているかをExcelに知らせているようです
Sub testshapes()
Dim i As Long
Dim sType As String
Sheet1.Shapes.Range(Array("Rectangle 5", "Chart 6")).Select
For i = 1 To Selection.Count
Debug.Print Selection(i).Name
Next i
Sheet1.Shapes.Range(Array("Chart 6", "Rectangle 5")).Select
For i = 1 To Selection.Count
Debug.Print Selection(i).Name
Next i
Sheet1.Shapes.Range(Array("Chart 6", "Rectangle 5")).Select
sType = TypeName(Selection(1)) 'avoids chart selected first bug
For i = 1 To Selection.Count
Debug.Print Selection(i).Name
Next i
End Sub
最初のセクションでは、正しい答えが得られます。2 番目のセクションでは、両方の debug.print ステートメントに対して「チャート 6」が表示されます。3 番目のセクションでは、正しい答えが得られます。
これがあなたの質問に完全に答えているかどうかはわかりませんが、それがあなたの質問に近づくことを願っています.