ここから本文です

vbaでファイルの有無の確認がうまくいきません。

ghi********さん

2019/4/2413:04:49

vbaでファイルの有無の確認がうまくいきません。

Sub 練習()
Dim FNAME As String
Dim count As Integer
Dim cnt As Long
Dim D As Date
Dim nSheet As Worksheet
Dim fso As String
Dim i As Integer
Dim f As New Scripting.FileSystemObject

Sheets("Sheet1").Cells.Clear
fso = "C:\Users\system2\Desktop\"
FNAME = Dir(fso & "\A*.zip")

Do While FNAME <> ""
cnt = cnt + 1
Sheets("Sheet1").Cells(cnt, 1) = FNAME
FNAME = fso & FNAME
Sheets("Sheet1").Cells(cnt, 2) = Left(FNAME, Len(FNAME) - 4)
FNAME = Dir()
Loop

For i = 1 To Sheets("Sheet1").Cells(Rows.count, 1).End(xlUp).Row
If f.FileExists(Sheets("Sheet1").Cells(i, 2)) = True Then
MsgBox "既に存在しています。"
Else
MsgBox "作成します"
MkDir (Sheets("Sheet1").Cells(i, 2))
End If

Next
End Sub

デスクトップにない場合はいいのですが、すでにデスクトップにある場合にもfileExistsがうまく働かず、MkDirでエラーになってしまいます。
また、fileExistsではなくDirでもダメでした。
どうすれば上手くいきますか?

補足ちなみに、デスクトップ上にあるエクセルファイルはAA.zipとAB.zipとAC.zipの3つです。

閲覧数:
59
回答数:
3
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

kky********さん

2019/4/2508:15:50

一例です。

Sub 練習()
Dim WSC As Object
Dim FSO As Object
Dim fpath As String
Dim fname As String
Dim cnt As Long
Set WSC = CreateObject("WScript.Shell")
fpath = WSC.SpecialFolders("Desktop") & "\"
With Worksheets("Sheet1")
.Cells.Clear
fname = Dir(fpath & "\A*.zip")
Do While fname <> ""
cnt = cnt + 1
.Cells(cnt, 1) = fname
fname = fpath & fname
.Cells(cnt, 2) = Left(fname, Len(fname) - 4)
fname = Dir()
Loop
Set FSO = CreateObject("Scripting.FileSystemObject")
For cnt = 1 To .Cells(Rows.count, 1).End(xlUp).Row
If FSO.FolderExists(.Cells(cnt, 2)) Then
MsgBox "既に存在しています。"
Else
MsgBox "作成します"
MkDir (.Cells(cnt, 2))
End If
Next cnt
End With
Set WSC = Nothing
Set FSO = Nothing
End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/4/25 10:52:23

すいません、できました!
ありがとうございます!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

tra********さん

2019/4/2508:47:51

>デスクトップにない場合はいい

FNAME = Dir(fso & "\A*.zip")
Do While FNAME <> ""



FNAME = Dir()
Loop
なので、For i = 1 To ・・・からの後半の処理は「デスクトップにない場合」はないですね。

>すでにデスクトップにある場合にもfileExistsがうまく働かず
ここ

Sheets("Sheet1").Cells(cnt, 2) = Left(FNAME, Len(FNAME) - 4)

がまずくないですか?

FNAMEは、
FNAME = fso & FNAME
なのだから、 C:\Users\system2\Desktop\AA.zip といった値。
このとき、
Left(FNAME, Len(FNAME) - 4)の値は、「C:\Users\system2\Desktop\AA」。
この値で、FileExistsをやっても、ファイルは存在することはないでしょうね。


そもそも何をしたいかの説明がないので、これ以上アドバイスしようがないですね。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

yh_********さん

2019/4/2501:03:23

Sub Main
Dim path as String
Dim name as String
path = "C:\Users\system2\Desktop\"
name = "AA.zip"
If Dir(path & name) = "" Then
MsgBox "File Found"
Else
MsgBox "File Not Found"
End If
End Sub

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる