|
▼目指せマクロの達人 さん:
>subを走らせたところ早速エラーが出ました。「実行時エラー"91": オブジェクト変数またはWithブロック変数が設定されていません」です。
rabbitさん、 お忙しいようなので、ぼくに分かることでヒントだけ
> With ActiveChart.SeriesCollection(1).Points(k + 1).DataLabel
のところで 「Withブロック変数が設定されていません」とのエラーになる
理由は簡単で、「ActiveChart」がないから、グラフが選択されていないから
です。
グラフが選択されていれば「ActiveChart」が存在するので、そこでエラーに
なることがありません。
しかし、グラフを選択した状態でプログラムを実行すると、今度は直前の
> theta = Cells(k + 2, 4).Value
の部分でエラーになると思います。
これはなぜかというと、グラフを選択した状態で「アクティブ」なのは
グラフのほうで、ワークシートではありません。
> Cells(k + 2, 4).Value
はセルの前にSheet が省略されていますので、いま「アクティブな」シート
が補われます。グラフを選択しているとき「アクティブなのは埋め込みグラ
フ」なので、そこのところは なんと
theta = ActiveChart.Cells(k + 2, 4).Value
と解釈されます! グラフに セルというものは存在しませんから、こんどは
こちらでえらーが発生するという塩梅です(-_-)
応急処置として、
始めに 埋め込みグラフを選択しておいて、
ActiveSheet.ChartObjects(1).Select
セルの前にシートを指定するようにコードを補えば、
theta = ActiveSheet.Cells(k + 2, 4).Value
その部分は動くでしょうけど、本来的ではないですね。
本来、対象グラフを ActiveSheet.ChartObjects(1) のように指定し、
セル範囲を記述するときはシートを指定するのを怠らなければ、
グラフを毎回選択する必要はないのです。
それと、DataLabel ははじめての時は HasDataLabelプロパティ
が Falseになっているので、いきなり ラベルテキストをセットしようと
すると そこでもエラーが発生すると思います。
私なら、グラフの系列1 のために変数を用意してそれを利用します。
Dim k As Long
Dim theta As Double
Dim Ser As Series '系列1 用変数
Set Ser = ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
Ser.HasDataLabels = True
For k = 1 To Ser.Points.Count '36
theta = ActiveSheet.Cells(k + 1, 4).Value
With Ser.Points(k).DataLabel
Select Case theta
Case Is <= 90
.Text = "→"
.Orientation = theta
Case Is <= 270
.Text = "←"
.Orientation = theta - 180
Case Else
.Text = "→"
.Orientation = theta - 360
End Select
End With
Next
|
|