- ベストアンサー
ExcelのVBAでのグラフ操作について
Excel2003からExcel2010にアップグレードしたのですが、グラフ操作について質問があります。 Excelのブックにグラフシートがあり、それをVBAで操作した後、2003では ActiveChart.Deselect で選択を解除できたのですが、2010には同じ構文が使用できません。 同様の操作を2010で行うためにはどうすればよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#意外と手ごわい... グラフシート、シート上ChartObjectsとも共通で、 素直にバージョン分岐して以下のコードで何とか。 If Not ActiveChart Is Nothing Then If Val(Application.Version) > 11 Then With ActiveSheet .Protect DrawingObjects:=True .Unprotect End With Else ActiveChart.Deselect End If End If
その他の回答 (1)
- end-u
- ベストアンサー率79% (496/625)
>Excelのブックにグラフシートがあり、それをVBAで操作した後、2003では ActiveChart.Deselect で選択を解除できたのですが、 グラフシートですか? シート上のChartObjectではなく? シート上のChartObjectなら以下のレスで良かったのですが。 Deselectメソッドは2007からHidden(非表示メンバ)になりました。 http://msdn.microsoft.com/en-us/library/bb242669%28v=office.12%29.aspx 2010のヘルプにも載っているかと思います。 別にエラーになるわけではなく、機能しないような感じですが。 2003でのDeselectメソッドは指定されたグラフの選択を取り消します。 取り消した後のSelectionはNothingなので、厳密に言えば違いますが 選択解除するという目的だけなら ActiveCell.Activate ..でいけるはず。 (これは2003の場合は逆にエラーになります) どうしても2003と2010共通で処理したいなら Dim r As Range Set r = ActiveChart.Parent.TopLeftCell Application.Goto r Application.Goto r ..な感じになります。 ただし、結果としてシート上ChartObjectのTopLeftCell選択になり、 ActiveCell.Activate の結果とは異なります。 それでも良ければ Application.Goto ActiveChart.Parent.TopLeftCell で。 (これは2003の場合は2回繰り返さないとダメなようです) もっとも、一番良いのはActiveChartが必要な状況を排除する事です。 全てVBAコード内で処理してるのなら、Chart選択しないコードにしたほうが良いです。 #今2010の環境で試せなくて、2007での確認なので外してたらすみません。
お礼
回答ありがとうございます。 質問のグラフはグラフシートになります。
お礼
回答ありがとうございます。 ご指摘の通りにしたところ、うまくいきました。 見た目だけの問題なのですが、解決してすっきりしました。 ありがとうございました。