エクセルのVBAで、チャートのプロパティを取得するスクリプトが現象の再現性なくコケることがあります。例えば、シートをたくさんつくってそれにデータを貼り付けて、シートごとに処理していくのですが、途中でそんなプロパティないとか、オブジェクトがないというメッセージがでてきます。同じ条件で同じスクリプトでうまくいったり、いかなかったりします。メモリなどの問題なのでしょうか?

大雑把な症状のレベルの質問ですみませんが、なにかヒントになりそうなことがあったらお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/07/31 13:28:39
  • 終了:2007/08/07 13:30:03

回答(2件)

id:airplant No.1

airplant回答回数220ベストアンサー獲得回数492007/08/02 01:09:48

ポイント35pt

どのくらいの数のグラフを利用しているか、個数のオーダが分かりませんが、メモリは直接関係ないと思います。1000とか10000個ならメモリも関係すると思います。

具体的なシート数やグラフ数、データ数が分かるともっとアドバイスできると思うので、具体的な内容の記載を勧めます。


グラフが原因で考えられるのは、次の2つです。

  1. マクロでグラフ名固定で参照している。一度消してから又作ると名前が変わってしまうので、オブジェクトが見つからない。
  2. グラフ毎に別々の種類や設定になっており、読めないプロパティがある。

 サンプルを掲載したので、エラー時のグラフ名称やプロパティを参照してみれば何かのヒントになるのではないかと思います。

サンプルは、積み上げ棒グラフで区分線★が入っていれば、動作しますが、区分線がない場合はエラーになります。

1つ目のグラフを区分線ありで作っておき、コピーで2つ目を区分線なしで作っておくと、2つ目の表示でエラーになります。

 なお、区分線の表示のところを外せば、全部のグラフ名称が出ますので、もしここで既にエラーとなっているのであれば、マイクロソフトのバグですね。

Option Explicit

Sub GetChartNames()

Dim objWorksheet As Worksheet
Dim objChart As ChartObject

    For Each objWorksheet In Worksheets
        For Each objChart In objWorksheet.ChartObjects
            MsgBox objWorksheet.Name & ":" & objChart.Name
                '下記は区分線がないとエラー
              MsgBox "区分線の色 = " & objChart.Chart.ChartGroups(1).SeriesLines.Border.Color
        Next
    Next

End Sub

★区分線((各要素を結ぶ線:要素選択→データ系列の書式設定→オプション))

http://www.google.co.jp

id:ardarim No.2

ardarim回答回数892ベストアンサー獲得回数1422007/08/05 17:17:19

ポイント35pt

Excelの場合、チャートオブジェクトは特にメモリを多く消費しますので、メモリ不足に陥っている可能性が考えられます。

Excelは、OSで使用可能なメモリを全て使おうとせずに、内部的にメモリ管理を行っており、そのためにいろいろ制限があると言われています。(こちらが詳しいです→Excel Memory Limits - Decision Models


Application.MemoryUsedで、Excelが内部的に使用しているメモリ量を知ることができますので、現象発生時確認してみてはいかがでしょうか。だいたい同じくらいの量で再現するのであればメモリ制限の可能性が高いと思います。

Application.MemoryFreeで、空き容量です。

こちらも参考に。

Office TANAKA - Excel VBA(メモリの状況を取得する)

  • id:taknt
    うん、メモリの問題だと思うね。
  • id:KUROX
    本当に同じ条件なんでしょうか?
    入力するデータがまったく同じでないと切り分けできません。

    メモリーの問題だとすると、多くメモリーを消費してるケース
    だと思うので、処理件数とかに依存すると思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません