- ベストアンサー
VBAでグラフオブジェクトの操作ができないエラーが発生する
- マクロを実行した際に、グラフオブジェクトの数は数えられるが、個々の操作ができずエラーが発生する。
- あるチャートオブジェクトに対してテキストを変更する際にエラーが発生する。
- VBAでは、グラフオブジェクトの数を数えることはできるが、個々のオブジェクトに対して操作を行うことはできない。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Chartが必要です。 ChartObjects(3)はChartの入れ物です。 ActiveSheet.ChartObjects(3).Chart.ChartTitle.Text = "TEST"
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
#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サイトでも、おかしな記述も見掛けます。こういうものは、道具ですから、使いこなしの問題であって、ふつう、長く使っていると、なんとなく、どれがふさわしいか決まってくるものです。
お礼
なるほど・・・ >今、お使いのPCの性能は、32bit だと思います。32bitの場合、16bitのInteger型は内部で32bit変換されます。 この部分は知っていたんですが、同じ変換をされるなら容量の小さな「Byte型」を使ってしまえ。という感覚で使用していました。 私は今後もVBAの勉強を続けていくつもりですので、こういうことにも注意していきたいと思います。 ご回答どうもありがとうございました。
- myRange
- ベストアンサー率71% (339/472)
>チャートオブジェクトの数は数えられるが >オブジェクト個々の操作はできないのでしょうか? これは質問のグラフ(埋め込みグラフ)が どういったオブジェクトのもとにあるのかがわかると理解しやすいかと。 【オブジェクトの関係】 WorkBooks(WorkBook) --Charts(Chart)▼▼ --WorkSheets(Worksheet) ----ChartObjects(ChartObject) ------Chart●● 質問のグラフは、上記でいうと最後の●●なので ChartObjectsプロパティを使って扱う場合は、 ChartObjects(3).Chart. となるわけです。 思うに個々のChartオブジェクトを扱う場合は 一旦、SelectしてActiveにしてから ActiveChart. で扱う方がメンバーが表示されるので簡単な気もしますが。。 因みに、▼▼は、グラフシートのコレクションです。 詳しくはヘルプ参照のこと。 以上です。
お礼
イメージできました。 どうもありがとうございます。
- piroin654
- ベストアンサー率75% (692/917)
With ActiveSheet.ChartObjects(3).Chart .HasTitle = True .ChartTitle.Characters.Text = "TEST" End With
お礼
どうもありがとうございます。
- kmetu
- ベストアンサー率41% (562/1346)
ActiveSheet.ChartObjects(3).Chart.ChartTitle.Text = "TEST" です。
お礼
どうもありがとうございます。
- Wendy02
- ベストアンサー率57% (3570/6232)
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 型でもエラーは出ませんが、一般的ではありません。
お礼
構造をちゃんと理解していませんでした。 ありがとうございます。 Byte型=0~255の整数値 Integer型=-32,768 ~ 32,767の整数値 Long型=-2,147,483,648 ~ 2,147,483,647の整数値 というだけではないんでしょうか?
お礼
構造をちゃんと理解していませんでした。 ありがとうございます。