アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
ご指摘の通りにしたところ、うまくいきました。

見た目だけの問題なのですが、解決してすっきりしました。
ありがとうございました。

お礼日時:2012/10/17 16:16

>Excelのブックにグラフシートがあり、それをVBAで操作した後、2003では ActiveChart.Deselect で選択を解除できたのですが、


グラフシートですか?
シート上のChartObjectではなく?
シート上のChartObjectなら以下のレスで良かったのですが。



Deselectメソッドは2007からHidden(非表示メンバ)になりました。
http://msdn.microsoft.com/en-us/library/bb242669 …
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での確認なので外してたらすみません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/10/17 15:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!