タイトル : Re: AccessVBAでエクセルが解放がされない件 投稿日 : 2014/02/27(Thu) 19:13 投稿者 : 魔界の仮面弁士
> Microsoft Windpws Common Controls-2 6.0 # google ってみたら、同じ typo が 70 万件…(汗) > 最後にエクセルが解放されずにプロセスに残ったままになってしまいます。 ざっと見た限り、提示頂いたコードそのものには問題点が見当たりませんでした。 Excelにファイルを開かせず、Workbooks オブジェクトにもアクセスせず、 Excel.Application だけを 起動→表示→終了→Nothing させるコードを試してみてください。 それだけでも解放漏れが出るてしまうようであれば、プログラミングの問題ではなく、 環境依存の問題が生じている可能性も考えられます。 何かアドインや自動起動マクロの類を利用していたりはしないでしょうか? (Excel 2003 互換メニューやツールバー系のソフトなど) もしも、起動→表示→終了 だけの単純な実験コードで試した場合には 正常に解放されるのであれば、それ以外の場所に問題があることになります。 元のコードを少しずつ削っていき、どの行を実行したときに 問題が発生しているのか、原因箇所を特定してみてください。 > Set xlApp = CreateObject("New Excel.Application") 違います。正しくは Set xlApp = New Excel.Application と書きます。 CreateObject を使う構文であれば、ご存知のように、 Set xlApp = CreateObject("Excel.Application") と書くことになります。こちらの構文の場合は、変数宣言を Dim xlApp As Object などと書き換えてやれば、そもそも Excel への 参照設定も不要になります。 > myAccDate = Format(myAcDate, "Short Date") 右辺の myAcDate というのが Date 型なのか Variant 型なのかは分かりませんが、 左辺の myAccDate については、Date 型なのですよね? Variant 型ではなく。 だとすれば、Format関数の戻り値は String 型(正確には違いますが)なので、 文字列を直接 Date 型に突っ込むことは、あまり望ましくありません。 (左辺が Variant か String であるならば問題ないですけど) もしも時刻部を切り捨てたいという意味だとしたら、こういう方法もあります。 (案1) x = Fix(myAcDate) (案2) x = DateValue(myAcDate) (案3) x = DateSerial(Year(myAcDate), Month(myAcDate), Day(myAcDate)) これらの方法なら、変換後の型も Date 型のままなので、 左辺が Date 型の変数であっても、問題は生じません。 > MsgBox ("追加データはありません。") 括弧が不要です。VBA でのメソッド呼び出しは、以下のいずれかの形式となります。 1: MsgBox "追加データはありません。" 2: Call MsgBox("追加データはありません。") 3: ret = MsgBox("追加データはありません。") 戻り値が必要な場合は 3 の文法。括弧が必要です。 戻り値が不要な場合は 1 の文法。括弧は付けません。 戻り値が不要だけど括弧をつけたい場合は、2 の Call 構文を使います。 |