【最大10000ポイント】当たる!!質問投稿キャンペーン!

WinXP-pro
Access 2003 (Excel 2003)

お世話になります。
以下のコードで、AccessのフォームからExcelファイルを開きます。

~~~~~~~~~~~~~~~
Dim obj As Object
Set obj = CreateObject("Excel.Application")
obj.Visible = True
obj.Workbooks.Open Application.CurrentProject.Path & "test.xls"
~~~~~~~~~~~~~~~

新しく開かれたtest.xlsファイルの上で入力を行い、Accessに戻ってフォーム上にあるボタンをクリックし、Excelファイルを閉じる処理までを行います。

問題はExcel操作中にセル上で「F2キー」を押下すると、入力状態になると思います。
この状態の時にAccess側で「obj.Quit」や「obj.cells(1, 1).select」のようなExcelへの操作を行おうとすると、ExcelとAccessの間で「ビジー状態である」と警告が表示され、処理が固まってしまいます。

Excelが入力状態であることが問題のようですので、入力を解除してやれば良いと思うのですが、この方法がわからず詰まっております。

入力状態解除の方法、もしくはこのようなフリーズ状況が回避できる方法がないものでしょうか。

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

> 問題はExcel操作中にセル上で「F2キー」を押下すると、入力状態になると思います。



とりあえず、Access 側で AppActivate で Excel をアクティブにし、
SendKeys で Enter キーを2回送信してみてはどうでしょう?


正直に言うと、おやりになりたいことがイメージできません。

> 新しく開かれたtest.xlsファイルの上で入力を行い、Accessに戻って
> フォーム上にあるボタンをクリックし、Excelファイルを閉じる処理

という仕様ですから、

  セルの編集終了--(手動操作)--> Access 側ボタンクリック --> Excel 閉じる

という過程で「セルの編集中」というのは問題にならないと思いますが。
セルの編集状態を解除してから、Access 側のボタンをクリックすれば
良いだけなのでは?

Excel のデータ入力中は、Access 側は待機状態なのですよね? なぜ

> この状態の時にAccess側で「obj.Quit」や「obj.cells(1, 1).select」
> のようなExcelへの操作を行おうとすると

といった状況が発生するのでしょうか?

この回答への補足

>とりあえず、Access 側で AppActivate で Excel をアクティブにし、
>SendKeys で Enter キーを2回送信してみてはどうでしょう?
ありがとうございます、試してみます。

>セルの編集終了--(手動操作)--> Access 側ボタンクリック --> Excel 閉じる
>という過程で「セルの編集中」というのは問題にならないと思いますが。
>セルの編集状態を解除してから、Access 側のボタンをクリックすれば
>良いだけなのでは?
>Excel のデータ入力中は、Access 側は待機状態なのですよね? なぜ
>> この状態の時にAccess側で「obj.Quit」や「obj.cells(1, 1).select」
>> のようなExcelへの操作を行おうとすると
>といった状況が発生するのでしょうか?

本来はExcelで編集状態を解除してから、Accessのフォームに戻ります。
ただ、Excelで値だけ打ち込んで、ENTERキーなどで決定をしないままAccessフォームに戻ってくるなどの操作が考えられるため、例外処理として対処をしたいと思った次第です。

なんか見当違いな事書いてましたらすいません。

補足日時:2008/07/23 18:11
    • good
    • 0
この回答へのお礼

解決しました。
AppActivateでは上手く動かすことができませんでしたので、WinAPIからSetForegroundWindowを利用しました。

事前にExcelのハンドルを取得しています。

~~~~~~~~~~~~~~~
Dim handle AS Long
Dim obj As Object
Set obj = CreateObject("Excel.Application")
obj.Visible = True
obj.Workbooks.Open Application.CurrentProject.Path & "test.xls"
handle = obj.hwnd



SetForegroundWindow handle
SendKeys "{ENTER}", True
SendKeys "{ENTER}", True
~~~~~~~~~~~~~~~

objにアクセスするだけで固まってしまうので、このような方法を取ってみました。
もっとスマートな方法や回避策はあると思いますが、希望通りの動作になりましたので、これでクローズさせていただきます。

アドバイスありがとうございました。

お礼日時:2008/07/24 15:47

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング