• ベストアンサー

エクセルVBAのWith~End With構文

Win2000エクセル2000です。 下記のMacro11はTEST11のようにWith~End Withでくくれると思うのですがエラーになります。 どこがおかしいのでしょうか? Sub Macro11() ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120).Select Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.ForeColor.SchemeColor = 64 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 Selection.ShapeRange.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59 Selection.ShapeRange.Adjustments.Item(1) = 0.3016 Selection.ShapeRange.ThreeD.SetThreeDFormat msoThreeD7 Selection.ShapeRange.ThreeD.PresetMaterial = msoMaterialMetal Selection.ShapeRange.ThreeD.Depth = 144# End Sub Sub TEST11() With ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120) .ShapeRange.Line.Weight = 0.75 .ShapeRange.Line.ForeColor.SchemeColor = 64 .ShapeRange.Fill.ForeColor.SchemeColor = 10 .ShapeRange.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59 .ShapeRange.Adjustments.Item(1) = 0.3016 .ShapeRange.ThreeD.SetThreeDFormat msoThreeD7 .ShapeRange.ThreeD.PresetMaterial = msoMaterialMetal .ShapeRange.ThreeD.Depth = 144# End With End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 >出来ればSelectしないでShapeRangeの属性を一括変更したいのですが・・・。 Selectしないならこうです。 Sub TEST12() With ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120) .Line.Weight = 0.75 .Line.ForeColor.SchemeColor = 64 .Fill.ForeColor.SchemeColor = 10 .Fill.OneColorGradient msoGradientFromCorner, 1, 0.59 .Adjustments.Item(1) = 0.3016 .ThreeD.SetThreeDFormat msoThreeD7 .ThreeD.PresetMaterial = msoMaterialMetal .ThreeD.Depth = 144# End With End Sub

AQUALINE
質問者

お礼

ありがとうございます! 思ったように出来ました。 わたしが最初に書いたものでは「ShapeRange」が余分だったのですね。 どうしてかわかりませんが助かりました。 ありがとうございました。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

くくれません。 くくるんだったらこうです。 Sub TEST11() ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120).Select With Selection.ShapeRange .Line.Weight = 0.75 .Line.ForeColor.SchemeColor = 64 .Fill.ForeColor.SchemeColor = 10 .Fill.OneColorGradient msoGradientFromCorner, 1, 0.59 .Adjustments.Item(1) = 0.3016 .ThreeD.SetThreeDFormat msoThreeD7 .ThreeD.PresetMaterial = msoMaterialMetal .ThreeD.Depth = 144# End With End Sub

AQUALINE
質問者

お礼

ありがとうございました。 くくれました。 でも、どうしてもSelectしなければいけませんか? 出来ればSelectしないでShapeRangeの属性を一括変更したいのですが・・・。 よろしくお願いします。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

Withは、 With object [statements] End With と、objectを指定してくださいという事になっています。 > With ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120) AddShapeはオートシェイプを追加するメソッドです。 -- Sub Macro11() ' オートシェイプを追加して選択 ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120).Select ' 選択されたSelectionのShapeRangeの属性を一括変更 With Selection.ShapeRange .Line.Weight = 0.75 ・ ・ .ThreeD.Depth = 144# End With End Sub では?確認していませんが…

AQUALINE
質問者

お礼

ありがとうございました。 くくれました。 でも、どうしてもSelectしなければいけませんか? 出来ればSelectしないでShapeRangeの属性を一括変更したいのですが・・・。 よろしくお願いします。

関連するQ&A