こんにちは。
いつもお世話になっております。
Excelがインストールされていない環境でExcelファイルの中身を参照するために
ADOを使用した処理を実装しています。
以下のようなコードで動作しましたが、一度処理を実行後に続けて処理を実行した場合に
ファイルアクセスのエラー(ConnectionのOpen時)が発生してしまいます。
(実行時エラー'2147418113 (8000ffff)'「致命的なエラーです。」)
EXEを終了し、再度処理を実行するとうまく動作します。
おそらくExcelファイルのインスタンスが解放できていないという類のエラーであると思いますが、原因が分かりません。
(EXE起動後の2回目の処理で必ず発生するわけではなく、3回目の場合があるのも謎です。)
何か分かりましたらご教示下さい。
---------------------------------------------------------------------------------
inputFileName = App.Path + "\test.xls"
outPutFileName = App.Path + "\test.csv"
On Error GoTo errorHdr
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" + inputFileName + ";" + "Extended Properties=Excel 5.0;"
.Open
End With
strSQL = "SELECT * FROM [sheet1$]"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open strSQL, cn, adOpenDynamic, adLockReadOnly, adCmdText
On Error GoTo 0
x = FreeFile
Open outPutFileName For Output As #x
Do Until rs.EOF
buff = ""
For col = 1 To rs.Fields.Count
If col < rs.Fields.Count Then
buff = buff & rs.Fields(col - 1).Value & ","
Else
buff = buff & rs.Fields(col - 1).Value
End If
Next
If Len(buff) = rs.Fields.Count - 1 Then
Exit Do
End If
Print #x, buff
rs.MoveNext
Loop
Close #x
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
MsgBox "完了しました。", vbInformation
Exit Sub
errorHdr:
On Error GoTo 0
MsgBox "ファイルのオープンに失敗しました。", vbCritical
If rs Is Nothing = False Then
If rs.State = adStateOpen Then
rs.Close
End If
Set rs = Nothing
End If
If cn.State = adStateOpen Then
cn.Close
End If
Set cn = Nothing
End Sub
---------------------------------------------------------------------------------
<環境>
Windows 2000(SP4), VB6.0(S6)
※ExcelファイルはExcel 95で作成(2500行×15列程度)
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>Set cn = New ADODB.Connection
>With cn
>.Provider = "Microsoft.Jet.OLEDB.4.0"
>.ConnectionString = "Data Source=" + inputFileName + ";" + "Extended Properties=Excel 5.0;"
>.Open
>End With
の後に以下を入れてみてください。
'終了まで待つ
Do While cn.Busy = True
DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
Loop
Do While cn.ReadyState <> 4
DoEvents '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
Loop
この回答への補足
>tomo316さん
回答ありがとうございます。
教えていただいたコードを挿入してみたところ、
「実行時エラー '3001'
引数が間違った型、または許容範囲外であるか、競合しています。」
が表示されました。
何か分かりましたらご教示下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
access テキストボックスの値取得
-
Access2013にてドラッグ&ドロ...
-
VBでファイルが開かれているか...
-
Adobeのプレミアプロの書き出し...
-
freadでデータがない場合の読込...
-
VB:「実行時エラー53 実行ファ...
-
エクセルVBAでパワーポイントを...
-
Returnに対するGoSubがありません
-
ADOを使用してExcelファイルを...
-
Request.BinaryReadでのエラー
-
アクセスのクエリでコンパイル...
-
FORTRANの実行エラーについて
-
VBから参照できないCのDLLを使...
-
ディストリビューションで作成...
-
Access2010 コンパイルエラー...
-
Dreamweaver3で「onLoad内で_on...
-
batファイルでレジストリキーの...
-
VC++2005 windowsフォームアプ...
-
CSVファイルが開かれているかど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
PowerShellを使って関連付けら...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
FTPの送信結果を検知したい
-
NAS上のファイルの使用中が解除...
-
VBA ExecuteExcel4Macro 型が一...
-
access テキストボックスの値取得
-
EXCELのVBAでWORDが開いてある...
-
すでにファイルが開かれている...
-
EXCELVBAでONEDRIVE上への保管...
-
Excelファイルのマクロによる排...
-
OUTLOOK VBA 指定フォルダ内の...
-
RAR圧縮ファイル(分割)の順番が...
-
エクセルマクロでエラーの原因...
おすすめ情報