Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : Microsoft 365)
フォームからエクセルのファイルを開く方法
投稿日時: 24/09/07 11:57:24
投稿者: yurappy

お世話になります。
 
アクセスのフォームからエクセルのファイルが開けなくて悩んでます。
 
こちらのページを参考に、次ぎの様にコードを書いてみました。
 
 
参考にしたホームページ
https://tasukete-access.com/2022/07/22/vba_open_excel/
 
 
 
 
試してみたコード
 
 
Dim excel_object As Object
 
Set excel_object = CreateObject("Excel.application")
 
excel_object.Visible = True
 
excel_object.Workbooks.Open "C:\Users\フォルダ名\フォルダ名\ファイル名.xlsm"
 
Set excel_object = Nothing
 
 
 
実行してみましたら、マクロを作成したり編集する時に表示されるダイアログボックスが表示されてしまいました。
 
そして、表示されたダイアログボックスを閉じて、アクセスを閉じても 鍵の付いたファイル(ロック ファイル ?)が消えず終了することが出来なくて、他のファイルも開けなくなって、アクセスを終了することが出来なくなりましたた。
 
仕方ないので、Windowsを再起動するとアクセスのファイルを開いたり利用する事ができる用になりますが、VBAを試すと同じ事の繰り返しになります。
 
 
開きたいエクセルのファイルは、マクロを複数含んでいる 拡張子が xlsm のファイルです。
 
OLEオートメーションという機能の設定等も行ってますが、よい方法がございましたらご指導ください。
 
よろしくお願いいたします。
 
 

回答
投稿日時: 24/09/07 13:32:53
投稿者: Suzu

OLEオートメーションを使用する理由は何でしょうか?
 
単に、Excel を起動するだけなら、
 
電卓やメモ帳を起動する
https://www.moug.net/tech/acvba/0090002.html
 
 の Shell関数を使い、
   Shell "Excel.exe ""C:\Folder\aaa.xlsx"""
 
ハイパーリンクを利用し、ボタンクリックでファイルを開く
https://www.moug.net/tech/acopr/0111010.html
 
で十分かと。
 
 
何にしても、当方には、ご説明の状況が理解しかねます。
 

引用:
マクロを作成したり編集する時に表示されるダイアログボックスが表示されてしまいました。

ここで言うマクロは、Accessのマクロ?ExcelのVBE画面?
 しかも、ダイアログボックス?? ダイアログボックスがいきなり表示されるのですか?
 それは、Excelが表示させてる? それとも、Accessが表示させてる?
 
そこには、何が表示されているのですか?
 
 
引用:
そして、表示されたダイアログボックスを閉じて、アクセスを閉じても 鍵の付いたファイル(ロック ファイル ?)が消えず終了することが出来なくて、他のファイルも開けなくなって、アクセスを終了することが出来なくなりましたた。

 
ロックファイル
 
laccdbファイルとは?laccdbファイルが消えずに残るとき
https://www.helpforest.com/access/ob_db/ac010006.htm
 
この、laccdb ファイル または、ldb ファイルの事でしょうか?
 
アクセスを閉じるとは、アクセスのウィンドの右上の×を押したという事?
それとも、別の方法?
 
引用:
鍵の付いたファイルが消えず 終了できない

と、併せて推察すると、Accessを閉じる操作を行おうと操作をしようとするけど 操作が受け付けられない
という事でしょうか?
 
考えうるのは、
今、画面が複数開いており、その中に、
Accessが表示させている画面があり、それが閉じられていないので、
当該 ファイルを 閉じようとしても、閉じる操作を受け付けていない状況
 
ALT + TAB で アクティブなウィンドウを切り替えてみて
上記の 画面が無いか 確認しましょう。
 
 
 
引用:
excel_object.Workbooks.Open "C:\Users\フォルダ名\フォルダ名\ファイル名.xlsm"

・別の xlsx を指定してみて同様になるか
・別の xlsm を指定してみて同様になるか
・その xlsm をエクスプローラーからダブルクリックで開いたらどうなるか
等、何に起因するのか試す事は可能です。

回答
投稿日時: 24/09/07 15:48:02
投稿者: hatena
投稿者のウェブサイトに移動

Access VBAでエクセルを操作するということでなく、単にエクセルブックを開くだけというなら、Suzuさんの回答のShellかハイパーリンクで開くというのでいいと思います。
 

引用:
そして、表示されたダイアログボックスを閉じて、アクセスを閉じても 鍵の付いたファイル(ロック ファイル ?)が消えず終了することが出来なくて、他のファイルも開けなくなって、アクセスを終了することが出来なくなりましたた。

 
これに関しては、8月26日の更新でセキュリティが強化されたのが原因かも知れません。(下記リンク参照)
 
Access365更新後の不具合 - Microsoft コミュニティ
https://answers.microsoft.com/ja-jp/msoffice/forum/all/access365%e6%9b%b4%e6%96%b0%e5%be%8c%e3%81%ae/738f8e6b-7caa-41d6-bb5a-4d802839c60b
 
私も最近急に同様の現象に見舞われて、上記を参考に、
トラストセンターにて、起動するAccessファイルのフォルダを「信頼できる場所」に追加する
ことで正常動作するようになりました。

投稿日時: 24/09/08 10:05:55
投稿者: yurappy

Suzuさま
hatenaさま
 
お世話になります。
ご親切にありがとうございます。
 
説明が下手で、また情報不足で申し訳ございません。
 
前提として、エクセルで入力した値を、アクセスで日報や週報などに集計(日計表や集計表印刷など)して処理する様に利用してます。
 
朝の最初の仕事で、前日に入力したエクセルの値をアクセスで日報や店舗毎の集計などに集計して出力してから、エクセルでその日の入力を始めるような業務の流れです。
 
 
その際に、VBAを利用してボタンひとつでアクセスを終了できて、入力用のエクセルが開けば便利だと思いまして、アクセルを終了する所までは次のコードで出来ました。
 
終了するVBAのコード
 
    If MsgBox("終了してよいですか。", vbYesNo + vbDefaultButton1, "確認") = vbYes Then
        Application.Quit
        Exit Sub
    End If
 
 
この続きに、エクセルを開くように前記のコードを書いてみました。
 
動作させてみましたら、画面が閉じて アクセスのマクロを編集する時の最初の画面 だけが開いて、他の画面がすべて閉じられた状態になって、アクセスを開いたり閉じたりすることも出来なくなりました。
 
マクロの画面には、自動的に form1 の名称のマクロがつくられた表示になりますが、Form_1 と言う名称のフォームは実際には無いフォームです。 
 
 
なぜ閉じたり開いたり出来ないかと思って、エクスプローラーで見たら、「 ファイル名.laccdb 」 の様な鍵マークのついたファイルがあったので、削除しようとしたら、使用中で削除できないと表示されました。
 
こちらが、hatenaさまが教えてくださった 8月26日の更新でセキュリティ の関係でしょうか?
 
 
 
そして、Suzuさま が教えてくださった 
 

引用:
Shell "Excel.exe ""C:\Folder\aaa.xlsx"""

 
を試してみましたら、アクセスが入力用のエクセルとリンクしているため、エラーの表示がされて「ファイル名.xlmsは編集中のためロックされています。」と表示されてしまいました。
 
 
試しに次ぎの様に書いて試しましたら、アクセルの画面が消えて何も表示されなくなりました。
 
 
    If MsgBox("終了してよいですか。", vbYesNo + vbDefaultButton1, "確認") = vbYes Then
        Application.Quit
        Shell "Excel.exe ""C:\フォルダ名\フォルダ名\フォルダ名\ファイル名xlsm"""
        Exit Sub
    End If
 
 
もしかしてと思って、エクスプローラーでみたら、また「 ファイル名.laccdb 」 の様な鍵マークのついたファイルが残っていていました。
 
 
アクセルで、VBAを利用しないと、鍵マークのファイルが消えてアクセルがきれいに終了できます。
 
 
新規にアクセスのファイルを作って、Suzuさま が教えてくださった Shell "Excel.exe ""C:\フォルダ名\フォルダ名\フォルダ名\ファイル名.xlsm""" を試したら、無事にエクセルの開くことが出来ました。
 
 
素人の考えでお恥ずかしいのですが、アクセルを閉じてその直後にエクセルのファイルを開けば良いのかと思いますが、上記のアクセルを閉じるコードの後に追記したら動かなかったので悩んでます。
 
 
よい方法がございましたら、教えてください。
 
 
よろしくお願いいたします。
 
 
 
 
 
 

回答
投稿日時: 24/09/08 12:45:10
投稿者: Suzu

ファイル名.laccdb
 
が残っているという事は、正常終了扱いになっていません。
 

引用:
アクセスが入力用のエクセルとリンクしているため、エラーの表示がされて「ファイル名.xlmsは編集中のためロックされています。」と表示されてしまいました。

についても、前述の 正常終了ができていない事が 原因の可能性もあります。
 
リンクを削除してから、終了という方法もありますが、
正常終了ができていない 事 が 不具合であり、その対処の為にリンク削除というのは
臨時的な対処としてはアリとは思いますが、正常終了できる様にする方が良いと思います。
 
ですので、
 MSの対応を待つなり、更新のロールバックを行い、正常に終了する様にしてから
 Excel との 連携を検討された方が、シンプルだと思います。
 
まずは、UpDateを実行してみて解消されるか。
解消されないのであれば、ロールバックを行ってみてはいかがでしょうか。

投稿日時: 24/09/08 13:19:03
投稿者: yurappy

Suzuさま
 
お世話になります。
アドバイスありがとうございます。
 
hatenaさまに教えていただいた
 

引用:
Access365更新後の不具合 - Microsoft コミュニティ
https://answers.microsoft.com/ja-jp/msoffice/forum/all/access365%e6%9b%b4%e6%96%b0%e5%be%8c%e3%81%ae/738f8e6b-7caa-41d6-bb5a-4d802839c60b
 

 
の、回避策1の 信頼出来る場所 と言うのがわからず、回避策2 のコマンドでの方法を試してみたのですが、同じ状態でしたので、引き続き試しているところです。
 
 
引き続き、私もネット検索したりして試してみます。
 
親切にありがとうございます。
 
よろしくお願いいたします。
 
 

回答
投稿日時: 24/09/08 14:58:29
投稿者: Suzu

引用:
回避策2 のコマンドでの方法を試してみたのですが、同じ状態でした

 
古い バージョン が ダウンロードされ、インストールされるはずなのですが
それらは、実行され、古いバージョンにはなったのですか?
 
それを確かめたうえで、同じ状態とおっしゃっていますか?
 
 
引用:
回避策1の 信頼出来る場所 と言うのがわからず

 
データベースを信頼するかどうか決定する
https://support.microsoft.com/ja-jp/topic/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E4%BF%A1%E9%A0%BC%E3%81%99%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E6%B1%BA%E5%AE%9A%E3%81%99%E3%82%8B-828ce4e9-1f38-4f4b-89c4-81bb0fcda8a4
 
 信頼できる場所を指定する

投稿日時: 24/09/08 15:10:14
投稿者: yurappy

Suzuさま
  
お世話になります。
わかりやすく、ありがとうございます。
 

引用:

古い バージョン が ダウンロードされ、インストールされるはずなのですが
それらは、実行され、古いバージョンにはなったのですか?

 
ダウンロードが始まって再起動したので大丈夫かと思いましたが、しっかりと確認せずにすみませんでした。
後ほど、調べて確認してみます。
 
 
 
引用:

データベースを信頼するかどうか決定する

 
調べ方も、リンクまで教えてくれてありがとうございます。
後ほど調べて試してみます。
 
 
明日から11日まで出張で、12日以降になるかもしれないですが、結果をご報告(投稿)いたします。
 
よろしくお願いいたします。

回答
投稿日時: 24/09/08 15:26:42
投稿者: hatena
投稿者のウェブサイトに移動

引用:
の、回避策1の 信頼出来る場所 と言うのがわからず、回避策2 のコマンドでの方法を試してみたのですが、同じ状態でしたので、引き続き試しているところです。

 
AccessでVBA実行後、Accessファイルを閉じても、ロックファイル(*.laccdb)が残り、再度開くことができないという現象は、私の紹介したリンク先の現象だと思います。
 
対処法としては、まずは、
リンク先の回避策1を試みる
それでだめなら、回避策2を試みる
ということになります。
 
回避策1は、公式のリンク先が紹介されていますが、簡単に説明すると下記のような手順です。
 
問題のAccessファイルを開く
「ファイル」をクリック
「オプション」をクリック
「トラストセンター」をクリック
「トラストセンターの設定」をクリック
「信頼できる場所」をクリック
「新しい場所の追加」をクリック
「参照」をクリック(フォルダー選択ダイアログが開く)
問題のファイルが置いてあるフォルダーを選択する
「OK」をクリック
「OK」をクリック
「OK」をクリック
 
以上です。
 
私の場合はこれで解決しました。
これでだめなら回避策2を試みてください。

投稿日時: 24/09/08 16:22:26
投稿者: yurappy

hatenaさま
Suzuさま
 
  
お世話になります。
ご親切にありがとうございます。
 
 
アクセスを終了するしてアクセルが開くまでは、出来る様になりました。
 
 

引用:
AccessでVBA実行後、Accessファイルを閉じても、ロックファイル(*.laccdb)が残り、再度開くことができないという現象は、私の紹介したリンク先の現象だと思います。

 
 
再度、コマンドでの方法を行いまして確認後、動作を行いましたら ロックファイル(*.laccdb) が残らずに終了出来る様になりました。
 
 
 
そして、エクセルのファイルを起動する件ですが、メッセージボックスを使用せずに次のコードで終了と起動だけはできました。
 
 
    Shell "Excel.exe ""C:\フォルダ名\フォルダ名\フォルダ名\ファイル名.xlsm"""
    Application.Quit
 
 
この後、メッセージボックスが開いて確認ボタンをクリックすると動作するように試してみます。
 
わかりやすくアドバイスいただいて、とても助かって心強いです。
 
ほんとうにありがとうございます。
 
よろしくお願いいたします。
 
 

投稿日時: 24/09/09 17:23:05
投稿者: yurappy

hatenaさま
Suzuさま
  
   
お世話になります。
ご親切にありがとうございました。
 
おかげさまで動作するようになりました。
 

引用:
AccessでVBA実行後、Accessファイルを閉じても、ロックファイル(*.laccdb)が残り、再度開くことができないという現象は、私の紹介したリンク先の現象だと思います。

 
こちらの現象が、回避策2の操作をやり直したら回避出来まして、VBAのコードを考えていたアクセスを終了してからエクセルを起動する順番でなくて、Suzuさまから教わりました エクセルを起動するコードを 先に書いてから、アクセスを終了するようにしたら、思うように動きました。
 
教わって修正し動いたコード
 
    If MsgBox("終了してよいですか。", vbYesNo + vbDefaultButton1, "確認") = vbYes Then
        Shell "Excel.exe ""C:\フォルダ名\フォルダ名\フォルダ名\ファイル名xlsm"""
        Application.Quit
        Exit Sub
    End If
 
順番や書き方が正しいのか、きちんと理解できていなくて申し訳ございませんが、動くようになってお礼申し上げます。
助けていただいて本当に助かりまして、感謝申し上げます。
 
ありがとうございました。
 
困った時には、またお願いいたします。
 
ほんとうに、ありがとうございました。
 
よろしくお願いいたします。