• ベストアンサー

ExcelのVBAでのグラフ操作について

Excel2003からExcel2010にアップグレードしたのですが、グラフ操作について質問があります。 Excelのブックにグラフシートがあり、それをVBAで操作した後、2003では ActiveChart.Deselect で選択を解除できたのですが、2010には同じ構文が使用できません。 同様の操作を2010で行うためにはどうすればよいのでしょうか?

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.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

zenithcooler
質問者

お礼

回答ありがとうございます。 ご指摘の通りにしたところ、うまくいきました。 見た目だけの問題なのですが、解決してすっきりしました。 ありがとうございました。

その他の回答 (1)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>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での確認なので外してたらすみません。

zenithcooler
質問者

お礼

回答ありがとうございます。 質問のグラフはグラフシートになります。

関連するQ&A