AccessからExcelの入力状態解除方法を解説

このQ&Aのポイント
  • AccessフォームからExcelファイルを開くと、Excelのセルが入力状態になり、操作が固まることがある問題があります。
  • 入力状態を解除する方法を知りたい方へ、本記事では解決策を提案します。
  • また、Excel操作の中断を回避する方法についても説明します。
回答を見る
  • ベストアンサー

Accessから呼び出したExcelの入力状態を解除したい

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が入力状態であることが問題のようですので、入力を解除してやれば良いと思うのですが、この方法がわからず詰まっております。 入力状態解除の方法、もしくはこのようなフリーズ状況が回避できる方法がないものでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答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への操作を行おうとすると といった状況が発生するのでしょうか?

tom7net
質問者

お礼

解決しました。 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にアクセスするだけで固まってしまうので、このような方法を取ってみました。 もっとスマートな方法や回避策はあると思いますが、希望通りの動作になりましたので、これでクローズさせていただきます。 アドバイスありがとうございました。

tom7net
質問者

補足

>とりあえず、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フォームに戻ってくるなどの操作が考えられるため、例外処理として対処をしたいと思った次第です。 なんか見当違いな事書いてましたらすいません。

関連するQ&A

  • アクセスVBAでエクセルを操作するのは不可能でしょうか?

    アクセスVBAでエクセルを操作するのは不可能でしょうか? テスト.xlsのシート1の1行目コピーして テーブルに追加するということがしたいのですがどういうコードを書けばいいのか分かりません。 テスト.xlsは開いている状態です。 アクセス側のユーザーフォーム上のコマンドボタンをクリックしたらこの動作を実行するコード。。。 というのは不可能でしょうか?よろしくお願い致します。

  • AccessでExcel出力

    以前こちらでAccessからExcelファイルの操作方法を教えて頂き下記のように記述しているのですがC:\test.xlsのExcelファイルに何も出力されません。 又、エラーも出ません。 どこに誤りがあるか教えていただけますでしょうか。 長くなり大変申し訳ございませんが宜しく御願い致します。 ----------------------------------------------- Private Sub Command1_Click() On Error Resume Next Dim objExcelApp As Workbook Dim strExcelFile As String Dim strExcelSheet As String Dim xlSheet As Excel.Worksheet strExcelFile = "C:\test.xls" 'エクセルのファイル名 xlSheet = "aaaaa" 'ブックのシート名 Set objExcelApp = GetObject(strExcelFile, "Excel.Sheet") xlSheet.Cells(1, 1).Value = "12" With objExcelApp.Worksheets(xlSheet) With .Cells(1, 1) .Font.Size = 18 .Font.Name = "MS P明朝" .Font.Bold = True '太字の指定 End With .Cells(1, 1).ColumnWidth = 8 .Rows(1).RowHeight = 26 End With xlSheet.PrintOut objExcelApp.Application.Quit Set objExcelApp = Nothing DoCmd.Close End Sub -------------------------------------------------

  • アクセスからエクセルへの処理

    Private Sub エクスポート_Click() Dim myExcel As Object 'エクセルに出力 DoCmd.TransferSpreadsheet filename:=CurrentProject.Path & "\分析素材\test.xls", _ tablename:="HJEX016", _ transfertype:=acExport 'ファイルを開く Set myExcel = CreateObject("Excel.Application")   myExcel.Visible = True ★ myExcel.workbooks.Open filename:=CurrentProject.Path & "\分析素材\test.xls" アクセスのテーブルをエクセルシートに出力し、そのファイルを開くという プログラムを作成してみたのですが、★のところで固まってしまいます。 何がいけないのでしょうか?

  • Access、Excel ともに2003 を使用しています。

    Access、Excel ともに2003 を使用しています。 Access で Excel を動かすことでの質問です。 まず「やりたいこと」を箇条書きにします。 (1)Accessのボタンを押すと以下の作業をする。 (2)Excel の ●●.xls を印刷する。   (但し、この時 Excel の画面は表示しない) (3)その ●●.xls は保存せずに終了する この間、画面は常にAccessが開かれた状態 これを Access側で次のように書きました。 Private sub ボタン_Click() strfile = CurrentProject.Path & "\●●.xls" Set Appexcel = New Excel.Application Set wb = Appexcel.Workbooks.Open(strfile) Appexcel.Visible=false ActiveSheet.PrintOut ActiveWorkbook.Saved = True Application.Quit End Sub こうすると、最後の「Application.Quit」でExcel も Access も 共に終了してしまいます。 Excel だけを終了させて、Access は引き続き次の作業に入るには どうすればよいのでしょうか。

  • AccessからExcel立ち上げ

    Access2003で作成したテーブルをExcelに出力し、そのファイルをAccessから開き、罫線や列幅等フォーマットを自動的に整え、表示します。表示中にデータ確認し、印刷等の処理を行い、閉じて、またAccessの操作に戻りたいと思います。 この際、アクセスで設定したエクセルのオブジェクト変数をCloseしてしまうと、エクセル画面が閉じられてしまう為、AccessモジュールでのClose処理を行わないままとなっています。この為か、引き続いて条件を変えてエクセルに出力して、同様の処理を行うと、AccessモジュールからのExcelの自動フォーマット化が行われなくなってしまいます。Accessを再起動すれば、正常に処理できるので、オブジェクト変数のClose未処理が原因と考えています。 このような場合、一般にはどのように処理されているのでしょうか?Excel画面表示後、DoループDoEvents関数で待ち状態とし、ボタン操作でExcel操作の終了を知らせて、オブジェクト変数のClose処理を行えばいいのかと思いますが、一般にはどのように処理されているものなのかご教示下さい。

  • エクセルからアクセスのプロシージャーを実行する

    エクセルからアクセスのプロシージャーを実行する方法を教えてください。 アクセスファイル名→ファイル1.accdb プロシージャー名→test1 なのですが、 エクセルで Sub ACCESSのプロシージャーを実行する() Dim OBJ As Object Set OBJ = GetObject("C:\Users\Desktop\ファイル1.accdb") OBJ.Application.Run OBJ.Name & "!test1" Set OBJ = Nothing End Sub としたら、 実行時エラー 2517 ’Microsoft Access!test1’プロシージャーが見つかりません。 になります。 test1は、アクセスの標準モジュール内に記載しています。 モジュール名も指定しないとだめなのでしょうか? その場合のコードの書き方がわからないので教授ください。 該当のアクセスファイルは既に起動しているときもあるし、してない時もあります。

  • AccessのVBAでExcel同様の計測データ処理できますか?

     これまでExcelのVBAで計測データの処理を行っていました。 数千~数万行のデータを指定したXLSファイルから読み取り、 対象期間内の平均や分散を求めたり、後処理(累乗や対数あ り)を行うような処理です。  今回、新たに処理するデータが、Accessのファイル形式で 保存されています。提供元の都合でこちらからファイル形式 の指定はできません。  いままで通りの処理は、VBAさえ使こなせばAccess上でも可 能でしょうか? Accessの経験はないに等しいですが、可能 なら勉強して取り組んでみようと思います。  ファイルをXLSに変換してこれまでのようにExcel上で処理 という手も考えられますが、行数が多くファイルを分割する など手間が増えそうなので、可能ならばAccess上で処理でき ればと考えています。

  • 入力フォームからエクセルデータをアクセスにインポートしたい

    入力フォームからエクセルデータをアクセスにインポートしたいと考えています。 入力フォームに、参照ボタンをつけて対象となるエクセルファイルを指定することはできましたが、その後、そのデータをアクセスのテーブルにインポートしたいと考えています。可能でしょうか。 宜しくお願い致します。 *********入力フォーム***************** <form method="POST" action="test.asp"> <input type="file" name="excel"> <input type="submit" value="送信"> </form> *********test.asp***************************************** *******ACCESSに接続まではできるが、エクセルのデータを testテーブルにインポートする方法がわからない。 また、インポートする前にtestテーブルのデータを 全て削除したいと考えています。****** Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("test.mdb") db.open

  • accessとexcel

    メーカーに勤務する者です。設備管理業務を行っています。設備は定期的にメンテナンスする必要があるため現在はAccessで設備の管理登録(管理番号の登録)を行い、Excelにデータを入力して管理部署と次回メンテナンス月を閲覧できるようにしています。 ただ、この方法だとAccessとExcelに同様のデータを2回入力しなければならず非常に効率が悪いです。 そのため各データ(設備名,管理部署, メンテナンス日)などを入力できるブランクのフォームを用意して、そこに入力することにより管理番号を自動的に発番して、部署ごと次回メンテナンス月ごとにExcelのファイルに振り分けるようにしたいです。 まず、ブランクのフォームを用意して管理番号を自動発番できる所まで教えて頂けないでしょうか? 以上、よろしくお願いします。

  • Access2003 フォームの入力ができない

    Accessまったくの初心者です。的外れな質問をしているかもしれませんが、よろしくお願いいたします。 FOM出版の「よくわかるAccess2003基礎」を使って勉強している最中なのですが、途中でつまづいてしまいました。 お客様Q&Aにも問い合わせをしている所なのですが、2営業日を過ぎないと回答が得られないとの事で、時間がもったいないので、こちらでも質問させてください。 テーブルを元にクエリを作成しフォームを作ったのですが、フォームにデータを入力しようとすると、PCより「ポンポン」と警告音がなり入力が全く出来ない状態です。 試しに、既存ファイルのクエリに入力をしてみたのですが同じ状況で入力できません。 テーブルには、数値の入力は出来ました。 フォームにデータを入力するには何か特別な操作が必要なのでしょうか? よろしくお願いいたします。

専門家に質問してみよう