前提・実現したいこと
Access2013で作成した現在運用中の弊社システムを、新しく導入したPCでも利用したいです。
発生している問題・エラーメッセージ
新しく導入したPCのうち特定の型式で、弊社システムを開いたときや特定のフォームを開いたときなどに、以下の2種類のエラーが発生します。
参照エラー?
※解決済み(3/11 追記)
『参照ファイル EXCEL.EXE を検索しています』というタイトルのダイアログが、いくつも出ては一瞬で消えを1秒ほど繰り返します。
フォームを開くときForm_Load
が発生するより前に発生するエラーで、いくつかの特定のフォームで発生しますが、1度発生するとAccess終了までは発生しなくなります。
実行時エラー
実行時エラーが発生したため、このアプリケーションの実行は中断しました。 アプリケーションを続行できません。システムは シャットダウンされます。
以上のダイアログが表示された後、フォームが開きなおされ(Form_Load
の発生を確認)その後Accessが特にダイアログ等もなく落ちます。
発生箇所としては以下の通りです。
- いくつかの特定のフォームが開いた後
Form_Load
が発生する前 - フォームにある特定のコンボボックスの値を変更し
After_Update
が発生する前 - フォームにあるExcel出力用のボタンをクリックし
Click
が発生する前
該当のソースコード
参照設定
弊社システムが参照設定でチェックマークを付けているのは以下の通りです。
- Visual Basic For Applications
- Microsoft Access 15.0 Object Library
- OLE Automation
- Microsoft Office 16.0 Object Libray
- Microsoft DAO 3.6 Object Library
- Microsoft Excel 16.0 Object Library
コンボボックス
コンボボックスは値集合ソースとしてクエリを使用していますが、同じクエリを使用したコンボボックスでAfterUpdate
の設定がないものについては、エラーは発生しません。
エラー発生箇所のコンボボックスのAfterUpdate
では、フォームのフィルターMe.Filter
の更新を行っています。
ただし、これは他のエラーの出ないコンボボックスと共通のFunctionプロシージャを呼んでいるものです。
他のコンボボックスを変更した場合には、問題なくフィルターの更新が行われます。
出力ボタン
Excel出力用のボタンでは、フォームで開いているクエリをExcelに出力していくコードを記述しています。
ざっくりと書くと以下のような感じです。
実際には中略部分に、レコードがない時の中断や、保存先を決めるための処理などがあります。
VBA
1 2Private Sub 出力_Click() 3 4 Dim xls As Excel.Application 5 Dim lngRow As Long 6 Dim lngCol As Long 7 8~中略~ 9 10 DoCmd.Echo False 11 12 Set xls = New Excel.Application 13 14 With xls 15 .ScreenUpdating = False 16 .Workbooks.Add 17 .Worksheets(1).Name = "hogehoge" 18 19 For lngCol = 1 To 3 20 .Cells(2, lngCol).Value = Me.Recordset.Fields(lngCol - 1).Name 21 Next lngCol 22 23 lngRow = 3 24 DoCmd.GoToRecord acDataForm, Me.Name, acFirst 25 26 Do 27 .Cells(lngRow, 1).Value = Me.cmb.Column(1) 28 .Cells(lngRow, 2).Value = Me.txt_01.Value 29 .Cells(lngRow, 3).Value = Me.txt_02.Value 30 31 If Me.CurrentRecord = Me.Recordset.RecordCount Then 32 Exit Do 33 Else 34 lngRow = lngRow + 1 35 DoCmd.GoToRecord acDataForm, Me.Name, acNext 36 End If 37 Loop 38 39 .Columns("B:B").NumberFormat = "yyyy/m/d" 40 .Columns("C:C").NumberFormat = "[h]:mm" 41 .Columns("A:C").AutoFit 42 43 .DisplayAlerts = False 44 .ActiveWorkbook.SaveAs "C:\hogehoge\asdf.xlsx" 45 .DisplayAlerts = True 46 .Quit 47 End With 48 49 Set xls = Nothing 50 51 DoCmd.Echo True 52 53 MsgBox "出力が完了しました。 ", vbInformation 54End Sub
質問が長くなってしまうので、必要であれば詳細を追記させていただこうかと思います。
PC環境
動作する環境1 | 動作する環境2 | エラーの出る環境 |
---|---|---|
2015年購入 lenovo製 | 2019年2月購入 hp製 | 2019年2月購入 富士通製 |
Intel Core i3-6100 3.70GHz | Intel Core i5-8500 3.00GHz | Intel Core i3-8100 3.60GHz |
HDD 1TB | SSD 500GB | HDD 500GB |
Windows10 Pro 64bit | Windows10 Pro 64bit | Windows10 Pro 64bit |
Access Runtime 2013 32bit | Access Runtime 2013 32bit | Access Runtime 2013 32bit |
Excel 2016 32bit | Excel 2016 32bit OEM | Excel 2016 32bit OEM |
弊社システムの開発環境は、動作する環境2にAccess 2013をインストールしたものです。
試したこと
- エラーが特定の箇所で起きるため、その洗い出しを行う
Form_Load
などのイベントにMsgbox
を差し込んで、エラーの発生タイミングを確認- 同時に購入した同じ型式のPCで試すと、結果は型式ごとで同じであることがわかった
- ランタイムの再インストールをしたり、2013の64bitや2016に変えても改善はせず
- 参照設定にExcel 16.0 Object Libraryを含む別のAccdbファイルは、どのPCでも正常に動作していた
- エラーの出るPCにOffice Personal 2013をインストールしても結果は変わらず
- NASにあったシステムを全てローカルに移してみるも結果は変わらず(3/8 追記)
同じWin10 & AccessRuntime2013 & Excel2016でもエラーの出ない環境があるから環境のせい?
他のシステムでExcelを使ってもエラーが出ないからシステムのせい?
原因がつかめない状態です。
補足情報(FW/ツールのバージョンなど)
システムは入力・集計用のフロントエンドと、データベース用のバックエンドの2つのファイルに分かれており、バックエンド上のテーブルをフロントエンドがリンクテーブルとして読み書きしている状態です。 フロントエンドは各PCのローカルに同一のものを配布しており、バックエンドは各PCが見られるNAS上に置いています。 (3/8 加筆修正)
Visual Basic Editorのデバッグ→コンパイルは通っている状態です。
その他、何か状況の特定に必要な情報があれば、教えていただければと思います。
詳しい方のお力をお借りできますと幸いです。よろしくお願いいたします。

回答3件
あなたの回答
tips
プレビュー