プロが教える店舗&オフィスのセキュリティ対策術

VB6で、あるフォルダ(A)に存在するCSVファイル(複数ファイル)が、別のフォルダ(B)に存在しているかチェックを行いたいのでうが、DIR関数を2重に使用すると、フォルダAの次への読み込み時にエラーになってしまいます。
何か別の方法はあるのでしょうか?

A 回答 (5件)

Q、何か別の方法はあるのでしょうか?


A、あります。

DIR関数を使わないとすれば、FileSystemObject になります。
Microsoft Scripting Runtime を参照させる必要があります。

Private Sub コマンド0_Click()
  Dim I  As Integer
  Dim N  As Integer
  Dim F() As String
  
  F() = GetFileList("C:\Temp")
  N = UBound(F())
  For I = 1 To N
    Debug.Print F(I)
  Next I
End Sub

[イミディエイト]
Test.txt
TestII.txt
TestNew.txt
Text.ini
Text.txt
取引先マスター.csv
夫婦.txt

このように GetFileList 関数を作成すれば一発で Dir 結果を取得できます。

[イミディエイト]
? FileExists("C:\Temp\Test.txt")
True

このように FileExists 関数を作成すれば一発で有り・無しも調べることが可能です。

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 FileSystemObject
   Dim fol   As Folder
   Dim fil   As File
   Dim fils   As Files
  
   Set fso = New 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

Public Function FileExists(ByVal FileName As String) As Boolean
  Dim fso As FileSystemObject
  
  Set fso = New FileSystemObject
  FileExists = fso.FileExists(FileName)
End Function
    • good
    • 0
この回答へのお礼

ありがとうございました。
FileExists 関数を使用して無事に解決しました。
とっても役立ちました。

お礼日時:2007/05/31 13:21

B側を調べる際に、以下のHPの「VB [VB6]」の所の例を参考に、Dirを使わずにFileExistsを使用して下さい。


http://jeanne.wankuma.com/tips/file/exists.html

FileExistsであれば、A側をDir関数でループしている最中でも使えます。

なお、Dir関数の使用はあまり推奨されていないので、出来れば、A側のループもFSOを使用した方が良いです。2重ループならFSOを2つ、3重ループならFSOを3つ、と、必要なだけFSOを宣言すれば良いだけなので。
    • good
    • 0

Dirを使わない別の方法をお探しなら


Scripting.FileSystemObjectが、それにあたります。
Scripting.FileSystemObjectで検索すると、たくさんでてきますが

http://www2.moug.net/bbs/exvba/20070411000054.htm
などが、サンプルがあって、試しやすいかもしれないです。
    • good
    • 0

Dir関数は入れ子で使うことが出来ません


フォルダAに対してDir関数を実行して配列などにファイル名を格納します
その後でこの配列を元にして フォルダBに対してチェックを実行しましょう

dim fname(200) as String
dim s as string, n as integer, i as integer
s = dir("フォルダA\*.csv")
if s<>"" then
do
fname(n) = s
n = n + 1
s = dir
loop while s<>""
end if

for i= 0 to n
if dir("フォルダB\" & fname(i) )<>"" then
' 処理を記述
end if
next

といった具合です ...
    • good
    • 1

どのようなソースでしょうか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!