掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ExcelオブジェクトからプロセスIDを取得するには? (ID:83881)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> (Excelの場合もこのようなエラーメッセージが出力されました.) Excelのバージョンにもよるのかも知れませんね。 当方で、Windows XP, Excel 2002, VB6 という環境において、 VB6にて新規プロジェクトを作成(参照設定は未設定)し、 イミディエイト ウィンドウにて、以下のコードを実行してみた時は、 '--------- Set X = CreateObject("Excel.Application") X.Visible = True X.Quit X.Visible = True Set X = Nothing '--------- 1. Quitすると、Excelは見えなくなりました。 ただし、プロセスには残っている状態です。 2. Visible操作で、Excelが再表示されました。 ただし、画面描画はされません。(X.ScreenUpdatingがFalseの状態です) 3. Nothingを代入した時点で、Excelのプロセスも終了しました。 ……という動作になっていました。 > 1.Excelを起動しマクロを実行させ実行結果ファイルを作成 (1プロセス) ここでいう「マクロ」とは、 (a) Excelワークブック内に含めたマクロシートの事。(Excel4マクロ) (b) Excelワークブック内に含めたVBAプロジェクトの事。(Excel VBA) (c) Excelを制御しているVB側のコードの事。(オートメーション操作) (d) Excelに組み込まれたアドインプログラム。(Excelアドイン) などのうち、(b)の事という認識でよろしいでしょうか? > 最後にQuit,シートオブジェクトの解放,ワークブックオブジェクトの解放,アプリケーションの解放を行います. 順番的には、 「ブックのClose」→「ブックの解放」→「本体のQuit」→「本体の解放」 のように、階層内の下位のオブジェクトから順に閉じた方が良いと 言われているようです。実際に違いがあるかどうかは確認していませんけど。(^^;) > この際,1.で終了したはずのオブジェクトが残っていたため, その後の「2」の件を考える前に、まず、「1」で残ってしまうという問題を 解決する必要がありそうですね。 さしあたり、「Selection」「Active〜〜」「Application」といった プロパティを使っているところが無いかどうか、確認してみてください。 これらは、Excelの「マクロの記録」を使った時に多用されるものですが、 VBからのオートメーション操作を行う場合、オブジェクトを修飾させる事を 忘れやすく、暗黙のApplicationオブジェクトを残してしまう結果となりがちです。 たとえば、以下のコードを実行した場合、Excelのプロセスが 残ってしまう結果となります。 ===================== Option Explicit Private Sub Command1_Click() Dim X As Excel.Application Dim B As Excel.Workbook Dim S As Excel.Worksheet Set X = CreateObject("Excel.Application") Set B = X.Workbooks.Open("C:\Book1.xls") Set S = B.Worksheets("Sheet1") X.Visible = True S.Range("A1").Value = Now() With Application.ActiveSheet.PageSetup .PrintTitleRows = "$1:$3" .PrintTitleColumns = "" End With Set S = Nothing B.Close False Set B = Nothing X.Quit Set X = Nothing End Sub ================== しかも、プロセスが残ったままの状態で、もう一度Command1を押下すると、 『オブジェクト変数または Withブロック変数が設定されていません。』 という実行時エラーになります。 この場合、どこが問題かというと、印刷設定を行っている 『With Application.ActiveSheet.PageSetup』 の部分です。この部分を、 『With S.PageSetup』 であれば、Excelが残ってしまうことはありません。 既存のコードをレビューする場合は、そうした点に注意してみてください。 # なお、今回はVB6なのであまり関係無いのですが、Excelの解放処理の件は、 # .NETからCOM相互運用で利用する場合、特に注意する必要があります。 # http://support.microsoft.com/default.aspx?scid=kb;ja;317109
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.