
こんにちは。
いつもお世話になっております。
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBでファイルが開かれているか...
-
NAS上のファイルの使用中が解除...
-
Returnに対するGoSubがありません
-
Access2013にてドラッグ&ドロ...
-
DOCUMENT行の書き出しについて-...
-
「パス名が無効です」の発生原因
-
PowerShellを使って関連付けら...
-
EXCELでのXMLファイルのインポ...
-
CFileのReadでの例外エラー#38...
-
VB6 Dir関数で52エラー発生
-
Excel 2003 のエラーメッセージ
-
InetのResponseCodeについて
-
DisplayAlertsブロパティで ”実...
-
ExcelVBAで既に開いてるwordを...
-
ブラウザ出力エラーのリカバリ...
-
【COBOL】read文でエラー
-
データベースソフトのアクセス2...
-
Access2010 コンパイルエラー...
-
excel VBA webからデータを取り...
-
エラー:インクルードファイル ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
access テキストボックスの値取得
-
PowerShellを使って関連付けら...
-
「パス名が無効です」の発生原因
-
NAS上のファイルの使用中が解除...
-
Returnに対するGoSubがありません
-
batファイルでレジストリキーの...
-
VB6 Dir関数で52エラー発生
-
ExcelVBAで既に開いてるwordを...
-
エクセルマクロでエラーの原因...
-
VBから参照できないCのDLLを使...
-
すでにファイルが開かれている...
-
VBでファイルが開かれているか...
-
アクセスのクエリでコンパイル...
-
アクセスでイベントのロジック...
-
FTPの送信結果を検知したい
-
DisplayAlertsブロパティで ”実...
-
FORTRANの実行エラーについて
-
排他ロックが掛かっているファ...
-
ACCESS VBAでのインポート
-
2003アクセス → 2010移行のト...
おすすめ情報