今、確認できる環境が無いので、外していたらゴメンなさい。
取り敢えず以下のように修正して動くか試して頂けますか?
Select
Active~
↓
Selectは止めて
対象のオブジェクトを明示的に指定
<2015/09/12 09:45 追記>
すみません、遅くなりました。そして、ポイントがズレていましたね…
###エラーの直接原因
確認した環境は違いますが(Excel2013)、エラーの直接の原因は多分この部分だと思います。
誤)ActiveChart.SeriesCollection(6).DataLabels.Select
正)ActiveChart.Chart.SeriesCollection(6).DataLabels.Select
Excelのオブジェクトモデルはとても複雑で、私もいつも混乱してしまう(マクロの記録の結果を利用する場合は特に)のですけれども、Excelのオブジェクトモデルに立ち返って考えてみるのが近道だと思います。
###理解のカギ
まず、スタートとなる知識は『ブック内のグラフは Chartメンバー によって表される』ということです。
(Chartメンバーの詳細についてはこちらを参照。SeriesCollectionオブジェクトについてはこちらをどうぞ)
そして、SeriesCollectionオブジェクトを利用するためには、ますオブジェクトを取得する必要がある訳ですが、そのためには ActiveChart.Chart.SeriesCollection
と書きます。
その意味を自分なりの言葉で 意訳 してみると
ActiveChart.Chart.SeriesCollection
の意味
現在アクティブになっているグラフ ActiveChart
の
Chart
メンバー(グラフそのものを表す)の SeriesCollection
プロパティを指定して
SeriesCollections
コレクション(SeriesCollectionオブジェクトの集合)を取得する
今の場合は ActiveChart.Chart.SeriesCollection(6)
となっているので、実際には SeriesCollections
コレクション のうちの6番目のメンバーである SeriesCollection
オブジェクト が1つ取得されることになります。
# 多分、一番の混乱の元になっているのは、同じ綴りの単語でも使用される文脈によって、メンバー
、プロパティ
、メソッド
、オブジェクト
など、異なるものを指している場合があるからだと思います。
# ちなみに、オブジェクトの集合であるコレクションは、オブジェクトの複数形になっているので、まだ比較的分かりやすいですけれども…
###マクロの記録を利用するコツ
次に、マクロの記録の結果を利用する際のコツについてですが、まずはご本家(Microsoft)の説明に一度目を通してみられると良いと思います。(こちら)
マクロの記録の場合、ユーザーの操作内容を 馬鹿正直に 記録して行きますので、何かをマウス操作で選択すると漏れなく 〜.Select
と記録されます。
しかし、VBAでコードを記載する場合の基本は
{対象のオブジェクト}.プロパティ
{対象のオブジェクト}.メソッド
のように対象となるオブジェクトを明示するので、それをあらかじめ選択(Select)しておく必要性はありません。
それと、マウス操作でラベルの表示内容を変更する場合には、一旦削除してから作成し直した方が早いですが、VBAで操作する場合には表示済みのラベルの値を修正する方が効率が良いです。
さらに、実際にコードを書く際には、同じオブジェクトに対する参照を何度も書くと読みにくいので、適宜
という書き方で同じオブジェクトに対する処理をまとめて書くと便利です。
###サンプルコード
以上を踏まえ こちら などを参考にサンプルコードを書いてみました。自分に環境では一応動きましたが、ゲストユーザーさんの環境ではどうか試してみてください。
Sub テスト用()
Dim vntLabels As Variant
Dim vntLabels As Variant
With ActiveSheet
' ラベルに設定したい文字列の記載されているセル範囲をバリアント型変数へ読み込む
vntLabels = .Range( {セル範囲} )
With .ChartObjects("グラフ 13").Chart.SeriesCollection(6)
For i = 1 To .Points.Count
.Points(i).DataLabel.Text = vntLabels(i, 1)
Next i
End With
End With
End Sub
以上、ご参考になれば幸いです。