Excel側からAccessモジュールを呼び出してExcelへクエリ結果をエクスポートしてますが、そのエクスポートされたファイルをオープンすると頻繁に(5回に1回くらい)「修復不可能」と言う、あのダイアログでメッセージが出ます。同じ条件のDATAでも毎回では無く、普通に成功する時もあります。一連の操作を全てExcel側からvbで行っているので、失敗したり、成功したりで安定せずに困っています。解決方法はあるでしょうか?DATA量はそんなにありません、Sheet数は4Sheetです。
Access側のモジュール
varAccess1 = "Q_内容分類集計"
varAccess2 = "Q_新旧集計"
varAccess3 = "Q_業種別集計"
varAccess4 = "Q_業種別新旧集計"
varExcelPass1 = "\\Cs0097\63022_cr\顧客対応システム\発表資料取込用.xls"
strmsg = "実績を、Excelファイルへ出力します。" & Chr(13) & _
"よろしければ、OKをクリックして下さい。"
If MsgBox(strmsg, vbOKCancel) = vbOK Then
DoCmd.TransferSpreadsheet acExport, _
acSpreadsheetTypeExcel9, varAccess1, varExcelPass1, True
DoCmd.TransferSpreadsheet acExport, _
acSpreadsheetTypeExcel9, varAccess2, varExcelPass1, True
DoCmd.TransferSpreadsheet acExport, _
acSpreadsheetTypeExcel9, varAccess3, varExcelPass1, True
DoCmd.TransferSpreadsheet acExport, _
acSpreadsheetTypeExcel9, varAccess4, varExcelPass1, True
MsgBox """データ出力は、正常に完了しました。"""
End If
Exit Sub
No.2ベストアンサー
- 回答日時:
私が伝えたかったのは。
。分かっていただけたようなので書き直しましたあるいは
i= 0
DoCmd ・・・
Do Until isOpend("\\Cs0097\63022_cr\顧客対応システム\発表資料取込用.xls") = 0
i = i + 1 '無限ループ対策
sleep 500
if i = 5 then 'この辺は適当に
msgbox varAccess1 & "で諦めました"
Exit sub 'で良くはないと思えますが取り合えず
loop
i = 0
DoCmd ・・・
以下同様に
Function isOpend(FileFullPath As String) As Integer
Dim fNo As Integer
fNo = FreeFile
On Error Resume Next
Open FileFullPath For Input Access Read Lock Read Write As fNo
Select Case err.Number
Case 0 '多分開かれていない
isOpend = 0
Case 53 'ファイルが見つからない
isOpend = 1
Case 70 '開かれているかも
isOpend = 2
Case Else
isOpend = 3
End Select
Close fNo
End Function
↑大昔の方法なのでご参考までに。
効果があるかは何ともいえませんが (^^ゞ
何度もありがとうございました。
それぞれの処理にsleep関数を付け加えたらどうやら安定したようです。
助かりました(*^_^*)
No.1
- 回答日時:
効果があるか皆目不明ですが(単なる思い付き・・)
Accessの標準モジュールに
'ミリセカンドで停止 sleep 300 など
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
を追加
DoCmd ・・・
Sleep 500
DoEvents
DoCmd ・・・
以下繰り返し
としてあげたら改善するかもしれません??
処理がAccess側とExcelファイル側で完了していないのに
次に処理が行ってしまうためではないかと邪推?しました。
Sleep で適当な待ち時間を与えてみたら・・ということです。
ExcelかAccessかどちらか一方で全ての処理を行う方が
間違いはないかと思います。
別案として
Docmd・・
発表資料取込用.xlsを排他で開けるまで待機する処理
誰も開いていなければ上のDocmd・・は終了しているハズ
Docmd・・
とか?
この回答への補足
この回答をヒントにもう少し考えてみました。
一つのエクスポート毎にスリープ時間を設ける。
これでうまく安定すればいいのですが・・
回答ありがとうございました。
私の説明不足でしたが
既に回答していただいた処置は、Excel側で取っています。
15秒ですが・・短いのでしょうか?
またエクスポートさせるファイルの場所があまりに階層深いのでは無いかとも考えて
場所も移動したりもしました。実行するExcelファイルの階層が深すぎるのでしょうか?
下記↓↓一番最後の行でデバックします。
Application.ScreenUpdating = False
'Accessのdataを取込ます。
Dim 確認 As Integer
Dim DATA転記 As String
DATA転記 = "顧客対応履歴のDATAをEXCELに転記します。全員がファイルを終了していますか?よろしければOKを押してください。"
確認 = MsgBox(DATA転記, vbOKCancel)
If 確認 = vbOK Then
Dim objACCESS As Object
Set objACCESS = CreateObject("Access.Application")
objACCESS.OpenCurrentDatabase "\\Cs0097\63022_cr\顧客対応システム\顧客対応履歴\発表資料用\顧客対応履歴レポート.mdb"
objACCESS.Visible = True
objACCESS.UserControl = True
objACCESS.Run "内容分類EXCEL"
objACCESS.CloseCurrentDatabase
objACCESS.Quit
Set objACCESS = Nothing
'取り込んだファイルが終了するまで15秒間待機する
Application.Wait (Now() + TimeValue("00:00:15"))
'EXCELに転記したDATA(発表資料取込用)を発表資料に取込ます。
Workbooks.Open "\\Cs0097\63022_cr\顧客対応システム\発表資料取込用.xls"
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
accessでクエリをExcelにエクス...
-
コマンドプロンプトのテキスト...
-
CSVファイルの時刻の形式について
-
AccessのレポートからPDFをペー...
-
accessのリポートを、excelに出...
-
アクセス→エクセルへエクスポー...
-
Acrobat参照設定
-
ショートカットで起動した場合...
-
Fortranでの出力ファイル
-
COBOL、項目末尾に空白がある場...
-
エクセルが裏で動いたままなん...
-
fortran
-
Microsoft Outlookで、vCardを...
-
Apacheのエラーログのログレベ...
-
WshShellから起動したbat(ftp)...
-
Thunderbird 受信メールからの...
-
ACCESS エクスポート ダイアロ...
-
MDI形式のファイルから文字をき...
-
ファイナルカットで編集した動...
-
EXCEL VBAでプリントイメージフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
コマンドプロンプトのテキスト...
-
COBOL、項目末尾に空白がある場...
-
Thunderbird 受信メールからの...
-
ファイナルカットで編集した動...
-
Acrobat参照設定
-
ショートカットで起動した場合...
-
Excel で「OLE は現在使用でき...
-
WshShellから起動したbat(ftp)...
-
iTextでPDFを表示させたら日本...
-
AccessのレポートからPDFをペー...
-
COBOL FILLER
-
EXCEL VBAでのCSVファイル読み...
-
ACCESS エクスポート ダイアロ...
-
VB6.0でExcel,PDF,Word出力方法
-
PHP:unzipコマンドにおけるエ...
-
アクセス→エクセルへエクスポー...
-
TransferSpreadsheetでフルパス...
-
accessのリポートを、excelに出...
おすすめ情報