
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が入力状態であることが問題のようですので、入力を解除してやれば良いと思うのですが、この方法がわからず詰まっております。
入力状態解除の方法、もしくはこのようなフリーズ状況が回避できる方法がないものでしょうか。
よろしくお願いいたします。
No.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フォームに戻ってくるなどの操作が考えられるため、例外処理として対処をしたいと思った次第です。
なんか見当違いな事書いてましたらすいません。
解決しました。
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にアクセスするだけで固まってしまうので、このような方法を取ってみました。
もっとスマートな方法や回避策はあると思いますが、希望通りの動作になりましたので、これでクローズさせていただきます。
アドバイスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
- 1 Excel200 Lotus1-2-3形式のキー操作を無効にしたい
- 2 Excel - 入力規則で自動的に値を入力するには
- 3 エクセル あるセルに文字を入力した後ボタン一つでそのセルを入力の状態ではなく只その同じセルを選択している状態にしたい
- 4 Access、デフォルトの日本語入力を解除したい
- 5 <ACCESS VBA -> EXCEL>getObjectしたEXCELファイルのシートを指定したい
- 6 excelで閉じる時の処理でAccessを開くがexcelの処理でAccessが開かない
- 7 【EXCEL】 入力規則-リストを利用したaliasによるデータ参照入力
- 8 EXCEL95のロック状態の解除の仕方について
- 9 Excel操作中のトラブル→特定セルの選択状態が解除できません。
- 10 Excelで1-7-8と入力すると、2001/7/8 となってしまう
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
エクセルのカーソルの移動速度...
-
5
セルに同じ数字をかける
-
6
Excelでセルに入力しようとして...
-
7
パワーポイント 軌跡を残す
-
8
excelのにおいてtabキーで右セ...
-
9
エクセル2010セル入力後指定の...
-
10
Excelでセルを次の行の先頭の列...
-
11
Excelで、Enterキーでセルの移...
-
12
wordで表を挿入した後に表の前...
-
13
←キーを押し続けても連続して移...
-
14
エクセル マクロで画像を指定...
-
15
エクセルのセルの移動について
-
16
Excelでカーソルの移動が...
-
17
エクセルで自動改行したいのです
-
18
エクセルシート、指定列に飛びたい
-
19
エクセルのEnterキーでの...
-
20
Excel 一番右のセルを参照する