重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

AccessのデータをExcelに書き込み、そのデータを元に散布図を作成するプログラムを作成しています。
Excelグラフは、予め作成してあり、Accessから書き込んだデータの数に応じて、グラフの値範囲を指定したいと思います。
With XLWB
'吸着データ数セット
.Sheets(GraphSheetName).Select
.ActiveChart.ChartArea.Select   'チャートのセレクト
.ActiveChart.FullSeriesCollection(SampleNM).Select  '名前がSampleNMの系列を選択
TempDomainFormula = Selection.Formula   '現在の値範囲の取得
End With
上記で取得した指定グラフ系列の値範囲の内、行数部分をReplace関数で置き換えて、再設定することで、値範囲の変更は出来ています。
しかし、作業終了後、objApp.Quit としてエクセルを終了しても、タスクマネジャーにExcelが残り、続けて、作業を繰り返すと、値範囲の取得に失敗してしまいます。
Excelは、下記のとおり、CreateObject関数で開いています。
Dim objApp As Excel.Application
Set objApp = CreateObject("Excel.Application") '変数にExcelオブジェクトを格納
GetObject関数でExcelを開くと、行いたい操作自体が動かなくなります。
Accessを一旦閉じれば、このExcelもなくなり、再び操作を行うことが可能となります。
系列のデータ範囲指定を行わなければ、問題なくExcelを閉じることが出来ます。
グラフデータ指定方法として不適当な操作を行っているのか、詳しい方にご教示頂ければと存じます。

A 回答 (2件)

> TempDomainFormula = Selection.Formula   '現在の値範囲の取得



原因は Excel の下位オブジェクトを直に指定しているところ。

Excel の Chartオブジェクトは 殆ど使ったことがないので
何を指定すればいいか分かりませbが

objApp.Selection
でいかがでしょう。

あるいは
TempDomainFormula = .ActiveChart.FullSeriesCollection(SampleNM).Formula

とかではどうでしょうか?


参考
http://rucio.a.la9.jp/main/technique/teq_15.htm
2-4.暗黙の参照をしている場合
でしょう。
    • good
    • 2
この回答へのお礼

ご教示有難う御座いました。
Application指定を追加することで解決しました。
SelectionをobjApp.Selectionと明示的に指定していなかった為、意図せず新規Excelが立ち上がり、エラーとなっていたということでしょうか。
大変勉強になりました。
有難う御座いました。

お礼日時:2025/02/13 09:52

処理の最後に



Set objApp = Nothing

のような処理を実行させ、CreateObjectしたオブジェクトを開放してあげるとどうでしょうか
    • good
    • 0
この回答へのお礼

早速回答いただき有難う御座います。
オブジェクト変数の開放は行っています。
それでも残ってしまいます。
操作の中で、管理されない状況で、エクセルアプリケーションが新たに起動されているのではないかと懸念しています。

お礼日時:2025/02/12 21:22

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A