dポイントプレゼントキャンペーン実施中!

フォルダ内のcsvファイルを[CSV貼り付け]というシートに
インポートさせるVBAをつくったんですが、CSVファイルがないときに
エラーメッセージを出すようにしたいのですがどうすればいいでしょうか。


----------------
Sub 読み込み()
Dim Bk As Workbook
Dim Rw As Long, ERw As Long


Const ShName = "CSV貼り付け" ' <-- 貼り付け先
PathN = ThisWorkbook.Path & " \ "
Const FNCom = "" ' <-- ファイル名の先頭共通部分指定
Dim FileN As String
Dim Cnt As Integer


FileN = Dir(PathN & FNCom & "*.csv") ' <-- 拡張子を指定 sFileName = Dir(sCurDir & "\*.*", vbNormal)
sCurDir = ThisWorkbook.Path & "\CSVファイル\"
FileN = Dir(sCurDir & FNCom & "*.csv") ' <-- 拡張子を指定


Rw = 1
Application.ScreenUpdating = False

Do Until FileN = ""
Cnt = Cnt + 1
Set Bk = Workbooks.Open(sCurDir & FileN, ReadOnly:=True)

Dim Rws As Long

With ThisWorkbook.Sheets(ShName)
.Cells.Clear
Bk.Sheets(1).Cells.Copy .Range("a1")

End With
FileN = Dir
Loop
Bk.Close SaveChanges:=False

Set Bk = Nothing



Application.ScreenUpdating = True
MsgBox " CSV読みこみ完了しました。", vbInformation



End Sub

A 回答 (4件)

#3です、たびたびすみません。


補足ですが、取り込むCSVファイルが一つだけと決まっている場合は、下記のようなコードでも行けます。
「CSV貼り付け」というシートに取り込みます。

-------------
Sub test()
Dim Bk As Workbook
Dim PathN As String
Dim FileN As String
Dim SheetN As String

PathN = ThisWorkbook.Path & "\CSVファイル\" ' <-- CSVファイルの入っているフォルダ
SheetN = "CSV貼り付け" <-- 貼り付け先のシート名(あらかじめこの名前のシートを作っておく)
FileN = Dir(PathN & "*.csv") ' <-- CSVファイル名取得

Application.ScreenUpdating = False

If FileN = "" Then
MsgBox "CSVファイルがありません。"
Exit Sub
End If

Set Bk = Workbooks.Open(PathN & FileN, ReadOnly:=True)
Bk.Sheets(1).Cells.Copy ThisWorkbook.Sheets(SheetN).Range("a1")
Bk.Close SaveChanges:=False

Application.ScreenUpdating = True
MsgBox " CSV読み込み完了しました。"

End Sub
    • good
    • 0

#2です。



不要なコードですが、たくさんありますよ^^;)
また、Do-Loopで廻していますが、CSVファイルが複数存在した場合に、最後に開いたファイルだけがコピーされ、前のは消されてしまいます。これでは何のためにループを廻しているのか意味がありません。

私でしたら下記のようにします。
「CSVファイル名」のシートを追加していき、そこにファイルの内容を取り込みます。複数のCSVファイルの場合もすべて取り込みます。
-------------------

Sub test()
Dim Bk As Workbook
Dim PathN As String
Dim FileN As String
Dim SheetN As String

PathN = ThisWorkbook.Path & "\CSVファイル\" ' <-- CSVファイルの入っているフォルダ
FileN = Dir(PathN & "*.csv") ' <-- CSVファイル名取得

Application.ScreenUpdating = False

If FileN = "" Then
MsgBox "CSVファイルがありません。"
Exit Sub
End If

Do Until FileN = ""
Set Bk = Workbooks.Open(PathN & FileN, ReadOnly:=True)
SheetN = Left(FileN, Len(FileN) - 4)
ThisWorkbook.Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = SheetN

Bk.Sheets(1).Cells.Copy ThisWorkbook.Sheets(SheetN).Range("a1")

Bk.Close SaveChanges:=False
FileN = Dir
Loop

Set Bk = Nothing

Application.ScreenUpdating = True
MsgBox " CSV読み込み完了しました。"

End Sub
    • good
    • 0

CSVファイルが一つもない時にエラーメッセージを表示、でしょうか?



Doの前に、

If FileN = "" Then
MsgBox "CSVファイルがありません"
Exit Sub
End If

を入れればよいかと思います。

なお、よくよくみると何の意味があるのか分からないようなコーディングが見受けられますが・・・。
    • good
    • 0
この回答へのお礼

うまくできました!
ネットにおちていた、コードを改造してつくったものです。
フォルダ内のCSVを
CSV貼り付けのシートに書き込みたいだけなんですが、なにか
不要なコードってありますか?
よろしければ教えて頂けないでしょうか

お礼日時:2013/08/01 19:39

On Error Resume Next


をエラーが出る個所の前に設置するば出ないと思います。
処理が短くエラーが限られている場合ならを入れておけば問題ないと思います。

これ以降エラーが出ても致命的でない限り飛ばすので
処理が長くなりほかのエラーも考えられるようでしたらあまりお勧めできません。

参考URL:http://officetanaka.net/excel/vba/tips/tips104.htm
    • good
    • 0

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