【问题标题】:Import multiple csv files to specific sheets in a workbook将多个 csv 文件导入工作簿中的特定工作表
【发布时间】:2019-10-27 19:50:07
【问题描述】:

我在位于 Z:\Data 的文件夹中拥有三个名为 CAT.csv、BAT.csv 和 MAT.csv 的 csv 文件。我希望将这些 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

【问题讨论】:

  • 您是否尝试将代码重复 3 次并更改所需的名称,例如工作表名称、地址等?
  • 是的,我做了但没用。出现重复字符串编译错误。

标签: excel vba csv-import


【解决方案1】:

像下面这样,再复制一次到最后一个文件。

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

【讨论】:

  • 这不起作用。它表示当前范围内的重复声明。
【解决方案2】:

我不会使用.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

【讨论】:

  • 不确定,如何锻炼。我对枚举不熟悉。我不想使用导入选项,因为 CSV 的导入不处理换行符。请问有没有其他替代方法。除此之外,如果未找到文件,则应弹出“未找到文件”和“是否要继续?”,如果单击“是”,则应在没有该文件的情况下继续。
猜你喜欢
  • 2012-08-23
  • 2017-12-15
  • 2018-01-25
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多