エクセルVBAにて、グラフエリアがクリアできない

解決


ぱん  2011-11-16 19:15:58  No: 103114

お願いします。
VB6.5
エクセル2003です。

現在SeriesCollection.NewSeriesにて作成したグラフを削除したいと考えています。
WorkBook①のグラフは問題なくActiveSheetChartObjects(1).Delete
で削除できるのですが、WorkBook②のグラフが削除できません。

If ActiveSheet.ChartObjects.Count <> 0 Then
   ActiveSheetChartObjects(1).Delete
End If

としても、実際にグラフがあるのにChartObjects.Countが0のままです。

WorkBook①とWorkBook②のグラフの違いは①は拡大縮小しても貼り付けているグラフは大きさを保持していますし、グラフエリアは移動可能です。
②の方は、Book全体をグラフ範囲とし(なので移動も不可)、拡大縮小すると連動して拡大縮小します。
この違いに何かあるのでしょうか?

また②がActiveになっているかどうかについては②のBookにグラフは描けるので問題ないかと思います。

すいませんが、アドバイスよろしくお願いします。


とくま  2011-11-16 21:45:14  No: 103115

>また②がActiveになっているかどうかについては②のBookにグラフは描けるので問題ないかと思います。
その判定では問題あるでしょう。
そもそも、エクセルで Active〜 と Select〜 系は
簡単に他の対象に変わりますよ?

> 実際にグラフがあるのにChartObjects.Countが0のままです。
その時の ActiveSheet.Name を確認してみて下さい。


とくま  2011-11-16 21:46:03  No: 103116

>また②がActiveになっているかどうかについては②のBookにグラフは描けるので問題ないかと思います。
その判定では問題あるでしょう。
そもそも、エクセルで Active〜 と Select〜 系は
簡単に他の対象に変わりますよ?

> 実際にグラフがあるのにChartObjects.Countが0のままです。
その時の ActiveSheet.Name を確認してみて下さい。


ぱん  2011-11-16 21:57:46  No: 103117

ActiveSheet.NameはWorkBook②に一つだけあるシート名でした。
その後、ActiveSheet.ChartObjects.Deleteとやっても②のシートにあるグラフは削除できません。

ActiveSheet.Nameが①にあるシート名の場合は問題なく削除できています。


とくま  2011-11-17 18:32:11  No: 103118

次は ActiveSheet.ChartObjects から削除する前に
各要素をループで取り出して、ChartObject.Name
を羅列して下さい。
その後、Delete を実行した後、もう一度
各要素をループで取り出して、Delete 前の
ChartObject.Name と比較して下さい。


とくま  2011-11-17 18:35:58  No: 103119

> 実際にグラフがあるのにChartObjects.Countが0のままです。
ああ、、0なのか。じゃあ、普通は取り出せないよね。。。

ごめんなさい。こちらの環境で再現できませんので、
グラフを追加しているコードも公開して下さい。


とくま  2011-11-17 18:45:07  No: 103120

連投すいません。
> Book全体をグラフ範囲とし(なので移動も不可)、拡大縮小すると連動して拡大縮小します。
> この違いに何かあるのでしょうか?
んん?Book 全体?WorkSheet 全体を使って全画面表示みたいになっているってこと?
それ、ChartObject じゃなくて、Chartシートじゃないの?

ThisWorkbook.Charts に格納されるもので、
ThisWorkbook.Worksheets と同じくワークシート扱い。
Dim c As Chart
For Each c In ThisWorkbook.Charts
    MsgBox c.Name
    c.Delete
Next


ぱん  2011-11-17 19:33:41  No: 103121

とくまさん回答ありがとうございます。

WorkSheet 全体を使って全画面表示みたいになっています。
WorkBook②はシートがひとつなので削除するとおこられます。

シートを追加して現状のシート削除して等やっていけばできるかもですが、
実際にWorkBook②はシート内のグラフエリアは手動で削除はできます。
(そのままシートは残っている)
シートを消すのではなく、この操作をしたいのですが、うまくいきません。

> ThisWorkbook.Charts に格納されるもので、
手動ではグラフエリアのみ削除できるのにシート全体の削除をしないといけないのでしょうか?


とくま  2011-11-17 19:51:01  No: 103122

> 実際にWorkBook②はシート内のグラフエリアは手動で削除はできます。
> (そのままシートは残っている)
でもそれってワークシートとは違ってセルがないでしょう?その状態
自体残すべきなのか?知らない人が開いたら、真っ白なシートが1枚
あるだけで壊れたファイルと思ったりするかもしれませんよ?

> 手動ではグラフエリアのみ削除できる
その場合は、その操作をマクロに記録すれば対象が何か?どんな操作を
しているのか確認できます。
>   ActiveChart.ChartArea.Select
>   Selection.Clear
グラフの削除はしていません。表示エリアのクリアになるようです。


ぱん  2011-11-17 19:56:02  No: 103123

とくまさん、解決しました。

Deleteボタンで削除しようとしていたのはただ単にクリアされていたのですね、よくわかりました。

>   ActiveChart.ChartArea.Select
>   Selection.Clear

で目的の操作ができました。
ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加