![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
AccessのVBAで質問です。
(今はテキストファイルの操作のみですが、使ったデータを後でAccessで使用したいこともあり、Accessにモジュールを書いています。)
【前提】
あるフォルダ内に、250個のテキストファイルがあります。
For ~ Nextで、ファイルがあれば開いて読み込み、別ファイルに書き出し、ファイルを閉じる。ファイルがなければ次のファイルに進む。
という処理をしたいです。
ファイルネームのルールは、AAAA.nnnで、拡張子nnnが3けたの数字になっています。(中身は必ずテキストファイルです。)
ファイル数は250ですが、nnnは欠番があるため、最終値は981です。
【質問したいこと】
で、Open pathname ~で開こうとすると、当然ながら、nnnが存在しないファイルの番号になってしまうとエラー(番号53)が出ます。
このエラーを無視して次のファイルの作業に進みたいとき、どのようにエラー処理をすればよいのでしょうか?
あるいは、Openする前に、ファイルの存在の有無を確認してから次の処理に飛ばす、ということはVBAからできるようでしたら、教えてください。
【現状・・・トホホ】
On errorやFor Nextを抜けるときなどのヘルプを読み、エラーハンドラーに飛ばすとか、同じようなコードを書いてみたのですが、エラーで止まってしまいます。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
[イミディエイト]
? FileExists("C:\Temp\Test.txt")
True
? FileWrite("C:\temp\Test1.txt", "AAAAA")
True
このように FileSystemObject を利用すれば割と簡単です。
Public Function FileExists(ByVal FileName As String) As Boolean
Dim fso As Object
Set fso = CreateObject("Scripting.FIleSystemObject")
FileExists = fso.FileExists(FileName)
End Function
Public Function FileWrite(ByVal FileName As String, _
ByVal Text As String) As Boolean
On Error GoTo Err_FileWrite
Dim fso As Object
Dim txs As Object
Set fso = CreateObject("Scripting.FIleSystemObject")
Set txs = fso.CreateTextFile(FileName, True)
txs.Write Text
FileWrite = True
Exit_FileWrite:
Exit Function
Err_FileWrite:
MsgBox Err.Description & "(FileWrite)", vbExclamation, " 関数エラーメッセージ"
Resume Exit_FileWrite
End Function
[イミディエイト]
? UBound(GetFileList("C:\temp", "*.txt"))
13
このように、一気にファイルリストを取得するという手もあります。
Public Function GetFileList(ByVal strDir As String, _
Optional strName As String = "*") As String()
On Error GoTo Err_GetFileList
Dim strFiles As String
Dim fso As Object
Dim fol As Object
Dim fil As Object
Dim fils As Object
Set fso = CreateObject("Scripting.FIleSystemObject")
Set fol = fso.GetFolder(strDir)
Set fils = fol.Files
For Each fil In fils
If fil.Name Like strName And fil.Attributes = Archive Then
strFiles = strFiles & "," & fil.Name
End If
Next
Exit_GetFileList:
On Error Resume Next
GetFileList = Split(Mid(strFiles, 2), ",")
Exit Function
Err_GetFileList:
strFiles = ""
MsgBox Err.Description & "(GetFileList)", vbExclamation, " 関数エラーメッセージ"
Resume Exit_GetFileList
End Function
[イミディエイト]
? FileReadAll("C:\temp\Test1.txt")
AAAAA
FileReadAll()があれば、全体は簡潔に書けるでしょう。
で、これは、頑張って挑戦されてください。
質問した以上に、以前からやってみたいと思っていたことまで含まれた回答をいただきました!
本当にありがとうございます。
書いていただいたコードは、読めるけど自力では書けないというレベルでした。今回を機会に、理解を深められると思います。
ありがとうございました!
No.3
- 回答日時:
普通は回答1,2のようにすると思いますが、
いまのコードをあまり変えないコード。。
On Error Resume Next を使って
'----------------------------------
On Error Resume Next
For N = 1 To XXXXX
●FileOpenの直後に
If Err.Number > 0 Then
Err.Clear
Exit For
End If
◎◎通常処理◎◎
Next N
'--------------------------------
外しましたらご容赦!
No.2
- 回答日時:
存在するファイルを処理したいのであれば Dir関数でファイル名を取得してみましょう
dim ss as String, sDir as string, sNames() as String
dim nIndex as integer
' カレントフォルダを記憶
sDir = CurDir
' ファイル名を取得
ss = Dir( "*.*", vbNormal )
do until ss = ""
' フィル名に . があれば
if InStr( ss, "." ) then
' . でファイル名を分割
sNames = split( ss, "." )
' 最後の要素番号を取得
nIndex = Ubound( sNames )
' 数字に変換できれば
if Val( sNames( nIndex ) ) and Len( sName(nINdex)) = 3 then
' 現行の処理をここに記述
end if
end if
Loop
chdir sDir
といった具合にして見ましょう
もし AAA.000 などがあるなら
if sNames( nIndex) = "000" or ( Val( sNames( nIndex ) ) and Len( sName(nINdex)) = 3 ) then
といった具合にしましょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同一フォルダにある複数のテキ...
-
Matlabでリストにあるファイル...
-
Excelのマクロについて教えてく...
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
エクセルで複数のコメントのサ...
-
エクセルvbaでdocuworksprinter...
-
CSV形式での保存時に”文字列...
-
デスクトップの画像をhtmlに表...
-
マインクラフトPCをプレイしよ...
-
ファイル名と同名のフォルダを...
-
Vb6.0ランタイム―FlexGridとカ...
-
C ファイル出力で、フォルダが...
-
[VBS] 16進数でバイナリファイ...
-
VBAでXCOPYの実行結果を取得したい
-
xcopyコマンドの進行状況を表示...
-
バッチファイル 別ファイルにリ...
-
サブフォルダ(データ)にある...
-
ddraw.h
-
外付けハードディスクに保存し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA】テキストファイルを指定...
-
同一フォルダにある複数のテキ...
-
Excelにて、フォルダ内のTextフ...
-
EXCELのVBAでEOFを誤認識
-
アスキー、バイナリーの違い、...
-
複数のテキストファイル内の複...
-
uwscでExcelに自動記入
-
スペース区切りのテキストファ...
-
VBScript(vbs)での行の取得につ...
-
VBSを使用し、指定フォルダ内の...
-
VBAでテキストファイルを最後ま...
-
テキストファイルの最終行を消...
-
Java バブルソート
-
unixのシェルスクリプトで特定...
-
コンボボックスのリストに、テ...
-
VBでのテキストファイルへ参照...
-
句点で改行
-
【VBA】テキストファイルの内容...
-
Visual Studioでボタンを押した...
-
VBでファイルの判定
おすすめ情報