• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:下記マクロを実行しましたところ、イミディエイトウインドウに7と表示され)

VBAでグラフオブジェクトの操作ができないエラーが発生する

このQ&Aのポイント
  • マクロを実行した際に、グラフオブジェクトの数は数えられるが、個々の操作ができずエラーが発生する。
  • あるチャートオブジェクトに対してテキストを変更する際にエラーが発生する。
  • VBAでは、グラフオブジェクトの数を数えることはできるが、個々のオブジェクトに対して操作を行うことはできない。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Chartが必要です。 ChartObjects(3)はChartの入れ物です。 ActiveSheet.ChartObjects(3).Chart.ChartTitle.Text = "TEST"

t000506g
質問者

お礼

構造をちゃんと理解していませんでした。 ありがとうございます。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#2 の回答者です。 >Byte型=0~255の整数値 >Integer型=-32,768 ~ 32,767の整数値 >Long型=-2,147,483,648 ~ 2,147,483,647の整数値 >というだけではないんでしょうか? 今、お使いのPCの性能は、32bit だと思います。32bitの場合、16bitのInteger型は内部で32bit変換されます。しかし、なぜ、Integer 型を利用するかというと、多くは、オーバーフローを想定して、エラーを出してトラブルを避けることを目的として利用します。その分、Integer型を利用するというのは、32bit に変換するので、オーバーヘッドが掛かるので遅くなります。現在のInteger型は、VBA自体は変更はされませんが、.Net で、Integer 型の扱いが変わりました。だから、もし、今後のことを考える場合は、一般の整数型の数値は、Long型にしたほうがよいです。 ところで、問題のByte型ですが、これは、Excel97以降のVBAで、新しいデータ型としてバイト型(Byte)が追加されました。これは、バイナリデータを扱う場合、バイト型の変数を利用するものです。 最後に、VBAの掲示板では、エラーがでなければ、どうでもよいと、こちらに反論する人もいますが、それはそれで、こちらが何もいう必要もないと思います。Webサイトでも、おかしな記述も見掛けます。こういうものは、道具ですから、使いこなしの問題であって、ふつう、長く使っていると、なんとなく、どれがふさわしいか決まってくるものです。

t000506g
質問者

お礼

なるほど・・・ >今、お使いのPCの性能は、32bit だと思います。32bitの場合、16bitのInteger型は内部で32bit変換されます。 この部分は知っていたんですが、同じ変換をされるなら容量の小さな「Byte型」を使ってしまえ。という感覚で使用していました。 私は今後もVBAの勉強を続けていくつもりですので、こういうことにも注意していきたいと思います。 ご回答どうもありがとうございました。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.5

>チャートオブジェクトの数は数えられるが >オブジェクト個々の操作はできないのでしょうか? これは質問のグラフ(埋め込みグラフ)が どういったオブジェクトのもとにあるのかがわかると理解しやすいかと。   【オブジェクトの関係】   WorkBooks(WorkBook)   --Charts(Chart)▼▼   --WorkSheets(Worksheet)   ----ChartObjects(ChartObject)   ------Chart●●   質問のグラフは、上記でいうと最後の●●なので ChartObjectsプロパティを使って扱う場合は、     ChartObjects(3).Chart.   となるわけです。 思うに個々のChartオブジェクトを扱う場合は 一旦、SelectしてActiveにしてから ActiveChart. で扱う方がメンバーが表示されるので簡単な気もしますが。。 因みに、▼▼は、グラフシートのコレクションです。 詳しくはヘルプ参照のこと。 以上です。  

t000506g
質問者

お礼

イメージできました。 どうもありがとうございます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

With ActiveSheet.ChartObjects(3).Chart .HasTitle = True .ChartTitle.Characters.Text = "TEST" End With

t000506g
質問者

お礼

どうもありがとうございます。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

ActiveSheet.ChartObjects(3).Chart.ChartTitle.Text = "TEST" です。

t000506g
質問者

お礼

どうもありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

 Dim n As Integer  n = ActiveSheet.ChartObjects.Count  If n >2 Then  With ActiveSheet.ChartObjects(3).Chart   .ChartTitle.Caption = "TEST"   ''.ChartTitle.Text = "TEST1" '(別の書き方)  End With  End If Dim n As Byte これは違います。Integer 型 や、Long型です。 Byte 型でもエラーは出ませんが、一般的ではありません。

t000506g
質問者

お礼

構造をちゃんと理解していませんでした。 ありがとうございます。 Byte型=0~255の整数値 Integer型=-32,768 ~ 32,767の整数値 Long型=-2,147,483,648 ~ 2,147,483,647の整数値 というだけではないんでしょうか?