プロが教えるわが家の防犯対策術!

何方か、回答をお願いします。
下記のマクロは全てのシートに対して埋込グラフのタイトルをシート名にする物ですが
ChartObjectsメソッドは失敗しましたと出るときが有ります。
On Error GoTo が効いてErrHandlerに行くときも有るのでよく分かりません。
有識者の方々のもっと良いコードを教えて下さい。
(1つのシートに対してグラフは0~3個です。)

Sub シート名グラフ名()

Dim mysheet As Worksheet
For Each mysheet In Worksheets

On Error GoTo ErrHandler

With mysheet.ChartObjects(1).Chart
.ChartTitle.Text = mysheet.Name
End With

With mysheet.ChartObjects(2).Chart
.ChartTitle.Text = mysheet.Name
End With

With mysheet.ChartObjects(3).Chart
.ChartTitle.Text = mysheet.Name
End With
ErrHandler:
Next mysheet
End Sub

A 回答 (3件)

こんばんは。



ためしに、元のコードに付け足してみました。
不必要なものは、削除してしまってください。

Sub グラフ名前調査() 'グラフをアクティブにしておく
Dim strName As String
Dim ChartName As String
Dim myChart As Object
Dim i As Integer
Dim t As String
strName = StrConv(TypeName(Selection), vbUpperCase)
If strName = "CHARTAREA" Or _
  strName = "GRIDLINES" Or _
  strName = "PLOTAREA" Then
  ChartName = ActiveChart.Name '名前
  i = ActiveChart.Parent.Index 'インデックス
  t = ActiveChart.ChartTitle.Caption 'タイトル
 
  MsgBox "名前:" & ChartName & vbCrLf & _
     "インデックス: " & CStr(i) & vbCrLf & _
     "タイトル:" & t
End If
End Sub
    • good
    • 0
この回答へのお礼

Wendy02様回答ありがとう御座います。
名前・インデックス値等取れることを確認しました。
今回も、勉強になるコードありがとう御座いました。

お礼日時:2006/12/18 20:28

こんばんは。

Wendy02です。

それは良かったです。VBAで、出来そうで出来ないのが、グラフですね。経験(=失敗の数)に勝る学習はありませんね。

>シート名+コメントみたいに変更出来ませんでしょうか?
>(sh.Name & "(グラフ1)" sh.Name & "(グラフ2)" sh.Name & "(グラフ3)" 

出来ると思いますが、ただ、"(グラフ1)" というのは、たぶん、作った順で、位置の順ではありませんから、もし、それでは上手くない時は、また考えます。

また、一応、シートごとで、番号を振ることにします。


Sub ChartTitleArrangeR()
Dim sh As Variant
Dim cht As Variant
Dim i As Integer
For Each sh In Worksheets
 For Each chrt In sh.ChartObjects
  With chrt
   i = i + 1
   .Chart.HasTitle = True
   .Chart.ChartTitle.Characters.Text = sh.Name & "(グラフ" & CStr(i) & ")"
  End With
 Next chrt
 i = 0
Next sh
End Sub

この回答への補足

Wendy02様何時も回答ありがとう御座います。
私の補足質問が間違っていました、すみません。
シート名+コメントなのですが、sh.Name & "(グラフ東京)"、sh.Name & "(グラフ大阪)"
こんな感じで数字でなく文字でした。

後もう一つ別件ですが良ければ教えて下さい。
下記のマクロでグラフの名前は取れますが、ChartObjects(3)と言うような
インデックス番号(間違っているかも?)この場合3を調べたのですがどの様な
コードを書けば宜しいのでしょうか。?

Sub グラフ名前調査() 'グラフをアクティブにしておく
Dim namaaa As String
namaaa = ActiveChart.Name
MsgBox namaaa
End Sub

補足日時:2006/12/15 21:01
    • good
    • 0

こんばんは。

Wendy02です。

私は、今、前の発言を調べてみたけれども、以前、それについては書かなかったようですね。

今回は、前回の失敗を学んで、Excel2000で調べております。
最初は、まず、エラー・トラップは入れておりません。これで試してみていただけますか?


Sub ChartTitleArrange()
Dim sh As Variant
Dim cht As Variant
For Each sh In Worksheets
 For Each chrt In sh.ChartObjects
  With chrt
   .Chart.HasTitle = True
   .Chart.ChartTitle.Characters.Text = sh.Name
  End With
 Next chrt
Next sh
End Sub

この回答への補足

Wendy02様何時も回答ありがとう御座います、作動確認してバッチリでした。
もし良ければですが、補足質問をお願いします。
現在はシート名とグラフタイトルはシート内で同じですが、
シート名+コメントみたいに変更出来ませんでしょうか?
(sh.Name & "(グラフ1)" sh.Name & "(グラフ2)" sh.Name & "(グラフ3)" 
こんな感じ)

補足日時:2006/12/14 17:36
    • good
    • 0

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