| 
    
     |  | シート上のRectangle図形のPrintObject を変更させるために、下記 Set_PrintObject
 を実行すると、図形を1つ選択時はエラーが発生し、図形を2つ以上選択時ではエラーは出ません。
 (エラー内容:オブジェクトは、このプロパティまたはメソッドをサポートしていません)
 
 図形の選択数に関係なく動作できるようにするために
 Set_PrintObject2
 のようにすると、エラーなく動くのですが、スマートではありません。
 もっと良い方法があればお願いします。
 それと、
 Dim sh As Object  '<===●
 の変数宣言は、Objectで適切なのでしょうか。
 よろしくお願いします。
 
 Sub Set_PrintObject()
 Dim sh As Object  '<===●
 'MsgBox TypeName(Selection)
 If TypeName(Selection) = "Range" Then Exit Sub
 
 For Each sh In Selection  '<===●図形1つ選択時、ここでエラー●
 If TypeName(sh) = "TextBox" Then 'Rectangle
 With sh
 .PrintObject = Not .PrintObject '印刷する True '印刷しない False
 Select Case .PrintObject
 Case True: .ShapeRange.Fill.ForeColor.SchemeColor = 1 '1白
 Case Else: .ShapeRange.Fill.ForeColor.SchemeColor = 41 'うすい青
 End Select
 End With
 End If
 Next
 End Sub
 
 
 Sub Set_PrintObject2()
 Dim sh As Object
 'MsgBox TypeName(Selection)
 If TypeName(Selection) = "Range" Then Exit Sub
 Select Case Selection.ShapeRange.Count
 Case Is = 1: 枠1の印刷ON_OFF
 Case Is > 1: 枠2の印刷ON_OFF
 End Select
 End Sub
 
 Sub 枠1の印刷ON_OFF()  '図形を1つ選択したとき
 Dim sh As Object
 'MsgBox TypeName(Selection)
 If TypeName(Selection) = "Range" Then Exit Sub
 If TypeName(Selection) = "TextBox" Then 'Rectangle
 With Selection
 .PrintObject = Not .PrintObject '印刷する True '印刷しない False
 Select Case .PrintObject
 Case True: .ShapeRange.Fill.ForeColor.SchemeColor = 1 '1白
 Case Else: .ShapeRange.Fill.ForeColor.SchemeColor = 41 'うすい青
 End Select
 End With
 End If
 End Sub
 
 Sub 枠2の印刷ON_OFF()  '図形を2つ以上選択したとき
 Dim sh As Object
 'MsgBox TypeName(Selection)
 If TypeName(Selection) = "Range" Then Exit Sub
 For Each sh In Selection
 If TypeName(sh) = "TextBox" Then 'Rectangle
 With sh
 .PrintObject = Not .PrintObject '印刷する True '印刷しない False
 Select Case .PrintObject
 Case True: .ShapeRange.Fill.ForeColor.SchemeColor = 1 '1白
 Case Else: .ShapeRange.Fill.ForeColor.SchemeColor = 41 'うすい青
 End Select
 End With
 End If
 Next
 End Sub
 
 |  |