人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: isogaya
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:VBA エクセル オブジェクト コケ スクリプト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● airplant
●35ポイント

どのくらいの数のグラフを利用しているか、個数のオーダが分かりませんが、メモリは直接関係ないと思います。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


2 ● ardarim
●35ポイント

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

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


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

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

こちらも参考に。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ