Импорт нескольких CSV-файлов на определенные листы в книге - PullRequest
0 голосов
/ 13 июня 2019

У меня есть три CSV-файла с именами CAT.csv, BAT.csv и MAT.csv в папке, расположенной в Z: \ Data. Я хочу, чтобы эти CSV-файлы были импортированы в рабочую книгу с именем «Ежедневная проверка», в которой есть отдельные листы с именами CAT, BAT и MAT. Я хочу, чтобы файл CAT.csv импортировался на лист CAT, а файл BAT.csv импортировался на лист BAT, а файл MAT.csv импортировался на лист MAT, находящийся в книге «ежедневная проверка» с помощью макроса. В дополнение к этому, если какой-либо из файлов csv не был найден в папке, тогда должно появиться окно сообщения «файл не найден» и также должно быть указано, какой файл не был найден, тогда должен выполняться остальной код и другие операции импорта. Работа. У меня есть код, который работает для импорта одного файла CSV, но не в состоянии изменить его для работы со всеми файлами CSV.

Sub ImportCSV()
    Const strFileName = "Z:\Data\CAT.csv"
    If Dir$("C:\Users\mbollineni\Desktop\To do\New folder\CAT.csv") = "" Then
   MsgBox "CAT File not found"
  End If
  Dim wbkS As Workbook
  Dim wshS As Worksheet
  Dim wshT As Worksheet
  Set wshT = Worksheets("CAT")
      Set wbkS = Workbooks.Open(fileName:=strFileName)
  Set wshS = wbkS.Worksheets(1)
  wshS.UsedRange.Copy Destination:=wshT.Range("A1")`enter code here`
  wbkS.Close SaveChanges:=False
End Sub

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Как показано ниже, скопируйте его еще раз для последнего файла.

Sub ImportCSV()

' For CAT File

    strFileName = "Z:\Data\CAT.csv"
    If dir$("C:\Users\mbollineni\Desktop\To do\New folder\CAT.csv") = "" Then
   MsgBox "CAT File not found"
  End If
  Dim wbkS As Workbook
  Dim wshS As Worksheet
  Dim wshT As Worksheet
  Set wshT = Worksheets("CAT")
      Set wbkS = Workbooks.Open(Filename:=strFileName)
  Set wshS = wbkS.Worksheets(1)
  wshS.UsedRange.Copy Destination:=wshT.Range("A1")
  wbkS.Close SaveChanges:=False

' For MAT file

    strFileName = "Z:\Data\MAT.csv"
    If dir$("C:\Users\mbollineni\Desktop\To do\New folder\MAT.csv") = "" Then
   MsgBox "MAT File not found"
  End If
  Dim wbkS As Workbook
  Dim wshS As Worksheet
  Dim wshT As Worksheet
  Set wshT = Worksheets("MAT")
      Set wbkS = Workbooks.Open(Filename:=strFileName)
  Set wshS = wbkS.Worksheets(1)
  wshS.UsedRange.Copy Destination:=wshT.Range("A1")
  wbkS.Close SaveChanges:=False




End Sub
0 голосов
/ 13 июня 2019

Я бы не использовал .Copy, но я не хотел менять логику:

Public Enum FileToImport
    [_Start] = 1
        CAT = 1
        BAT = 2
        MAT = 3
    [_End] = 3
End Enum

Function WorksheetToUse(FileNumber As FileToImport) As Worksheet
    Dim wsName As String
    Select Case FileNumber
        Case FileToImport.CAT: wsName = "CAT"
        Case FileToImport.BAT: wsName = "BAT"
        Case FileToImport.MAT: wsName = "MAT"
    End Select
    Set WorksheetToUse = ThisWorkbook.Worksheets(wsName)
End Function

Function FileNameToUse(FileNumber As FileToImport) As String
    Select Case FileNumber
        Case FileToImport.CAT: FileNameToUse = "CAT.csv"
        Case FileToImport.BAT: FileNameToUse = "BAT.csv"
        Case FileToImport.MAT: FileNameToUse = "MAT.csv"
    End Select
End Function

Function FileExists(strFullPath As String) As Boolean
    FileExists = Dir(strFullPath) <> ""
End Function

Sub ImportCSV()
    Const strDefaultFolder As String = "Z:\Data\"
    Dim wbkS As Workbook
    Dim wshS As Worksheet
    Dim wshT As Worksheet
    Dim lCounter As Long
    Dim strErr As String
    Dim strFullPath As String

    For lCounter = FileToImport.[_Start] To FileToImport.[_End]
        strFullPath = strDefaultFolder & FileNameToUse(lCounter)
        If FileExists(strFullPath) Then
            Set wshT = WorksheetToUse(lCounter)
            Set wbkS = Workbooks.Open(strfullname)
            Set wshS = wbkS.Worksheets(1)
            wshS.UsedRange.Copy Destination:=wshT.Range("A1")
            wbkS.Close SaveChanges:=False
        Else
            strErr = strErr & vbNewLine & FileNameToUse(lCounter) & " not found"
        End If
    Next lCounter

    If strErr <> "" Then
        MsgBox Mid(strErr, 3), vbExclamation, "File not found!"
    End If
End Sub
...