人生最悪の忘れ物

いつも参考にさせて頂いております。

生徒にグラフを作ってもらい、そのグラフが問題どおりに作られているかどうかをVBAで判定しようと考えています。
凡例の位置とレイアウトの判定がうまくできません。コードは以下のようにしております。

Sub Test()
 Dim Q6_sh As Worksheet
 Set Q6_sh = Worksheets("年間実績表")
  With Q6_sh.ChartObjects(1).Chart
    If .ApplyLayout(6) Then
     Q6_sh.Range("Q5") = 5
    Else
     Q6_sh.Range("Q5") = 0
    End If
    If .SetElement(msoElementLegendBottom) Then
     Q6_sh.Range("Q7") = 5
    Else
     Q6_sh.Range("Q7") = 0
    End If
   End With
End Sub

グラフのレイアウトをリボンから「レイアウト6」を選び、判例をリボンから「下に配置」を設定していますが、どちらも結果は指定したセルに「0」が表示されます。
データラベルやグラフタイトルはうまく判定がされたのですが、レイアウトと凡例がうまくできません。

一度マクロの記録で操作を行って、どのように記述されるかを試してみました。すると、以下のようになりました。最初からグラフを選択した状態からの記録です。

ActiveChart.ApplyLayout (6)
ActiveChart.SetElement (msoElementDataLabelOutSideEnd)
ActiveChart.ChartArea.Select
ActiveChart.SetElement (msoElementLegendBottom)

上のコードを参考に、
  If ActiveChart.ApplyLayout(6) Then
Q6_sh.Range("Q5") = 5
Else
Q6_sh.Range("Q5") = 0
  End If
と記述すると、「.ApplyLayout(6)」でエラーがでて「Functionまたは変数が必要です」などというメッセージが表示されます。
そこで、最初のコードのように
  Q6_sh.ChartObjects(1).Chart.ApplyLayout(6) という書き方にするとエラーは表示されませんでした。
たぶん、このあたりが間違っているのではと思っていますが・・。

どなたかのご指導があれば助かります。宜しくお願い致します。

A 回答 (1件)

リファレンスを見ると、ApplyLayout()はサブルーチンなので戻り値は無いです。


なので、if文の条件式に書けません。

どういうレイアウトなのかは、個々のプロパティや位置関係を特定しないと判断できないのかも。
    • good
    • 0
この回答へのお礼

osamuyさんありがとうございました。
戻り値がないということで、調べてみました。やはり個別に判断する必要があるようです。
レイアウトとなるデータラベルの位置や凡例の位置はpositionプロパティがありましたので、それを使うとうまく判定できました。

解答して頂いた言葉がヒントになりました。ご指導ありがとうございました。

お礼日時:2012/08/05 17:07

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


おすすめ情報