winXPの混在環境でのテストですが
Sub try()
'97-2003,2007,2010
On Error GoTo Errlog
With Sheets.Add
1: .Protect userinterfaceonly:=True
2: .Cells(1).Value = 1
3: .Ovals.Add 0, 100, 100, 100 'ok,ok,ok
4: .Shapes.AddShape msoShapeOval, 0, 200, 100, 100 'ng,ok,ok
5: .ChartObjects.Add 0, 300, 100, 100 'ok,ng,ng
6: .Shapes(.Shapes.Count).Delete 'ng,ng,ok
7: .DrawingObjects(.DrawingObjects.Count).Delete 'ok,ng,ok
End With
Exit Sub
Errlog:
With Err
Debug.Print Erl, .Number, .Description
Resume Next
End With
End Sub
[97-2003]
4 1004 アプリケーション定義またはオブジェクト定義のエラーです。
6 1004 アプリケーション定義またはオブジェクト定義のエラーです。
[2007]
5 1004 アプリケーション定義またはオブジェクト定義のエラーです。
6 -2147024809 指定された値は境界を超えています。
7 1004 Oval クラスの Delete メソッドが失敗しました。
[2010]
5 1004 アプリケーション定義またはオブジェクト定義のエラーです。
こんな結果です。2007と2010でも挙動が違うようですね。
Shape関係の仕様変更に伴ってProtectメソッドでの扱いも変わったのでしょうか。
深く検証したわけではないので詳しくは解らないですけど。
>マクロから描画前にシート保護を解除して、グラフを描画、描き終えたら最後に
>保護を設定する・・・・
>とするしかないですかねぇ・・
それが無難なようです。
補足
お忙しいところご回答頂きありがとうございます。 ご指摘のとおり、シートに保護がかかっておりました。 ThisWorkbook に以下のコードがありまして、オープンするたびに シートに保護がかかるようでした。 Private Sub Workbook_Open() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ws.Protect userinterfaceonly:=True Next End Sub そこで、ワークシート保護を解除すると、マクロでのグラフ描画が可能となりました。 ありがとうございました。 ただ、腑に落ちないのは2000や2003ではシートを保護したままでも 質問文のとおりマクロによるグラフ描画が出来ておりまして、 ↑マクロでファイルオープン時に保護をかけていたとしても Protectメソッドで userinterfaceonly:=True を指定してあるのであれば画面上からの変更は保護されるでしょうが、 マクロからの変更は保護されず、グラフ描画は可能になるはずでは ないのではないでしょうか? だとしたら、やはり2010の仕様変更によりシートが保護されている状態では マクロからでもグラフの描画を規制していると言うことでしょうか? シートはやはり画面からいじられたくないので保護をかけたいと思います。 マクロから描画前にシート保護を解除して、グラフを描画、描き終えたら最後に 保護を設定する・・・・ とするしかないですかねぇ・・