Vba将CSV文件导入Excel

Vba将CSV文件导入Excel,vba,excel,csv,Vba,Excel,Csv,我正在尝试使用VBA代码将Csv文件导入excel,我希望它能够处理所有Csv文件,但它没有。这是我的密码: Sub Input_CSV() Dim Wb As String Dim Arr Set Wb = GetObject(Application.GetOpenFilename("csv file,*.csv", , "please choose a csv file", , False)) Dim blnImportData As Boolean blnIm

我正在尝试使用VBA代码将Csv文件导入excel,我希望它能够处理所有Csv文件,但它没有。这是我的密码:

Sub Input_CSV()

Dim Wb As String
Dim Arr

    Set Wb = GetObject(Application.GetOpenFilename("csv file,*.csv", , "please choose a csv file", , False))

    Dim blnImportData As Boolean
    blnImportData = ImportCSV(Wb, "Sheet1", "A1")
    If blnImportData Then MsgBox "Import CSV process complete", vbInformation, ThisWorkbook.Name _
    Else MsgBox "Import CSV process failed", vbCritical, ThisWorkbook.Name

End Sub
这是函数代码

Function ImportCSV(ByVal Filename As String, _
                   ByVal Worksheet As String, _
                   ByVal StartCell As String) As Boolean
 On Error GoTo Catch

    Dim strConnectionName As String
    strConnectionName = "TEXT;" + Filename

    With Worksheets(Worksheet).QueryTables.Add(Connection:=strConnectionName, _
                                               Destination:=Worksheets(Worksheet).Range(StartCell))
        .Name = Filename
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True 'False
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True 'False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .Refresh BackgroundQuery:=False
    End With

        ImportCSV = True
        Exit Function

Catch:
        ImportCSV = False

End Function

我怎样才能纠正它?有人能帮帮我吗

您可以简化并使用以下方法打开文件:

Public Sub OpenCsvFile(byVal filepath)
    Workbooks.OpenText filename:=filepath, dataType:=xlDelimited, semicolon:=True
End Sub

有关此方法的更多详细信息

这里有一个很好的解释:

使用我在案例中应用的代码:

 Sub OpenCSV()

 Dim sPath As String
 sPath = ThisWorkbook.Path & "\Site_survey_form2.csv"
 Workbooks.OpenText Filename:= _
 sPath, DataType:=xlDelimited, Semicolon:=True, Local:=True
 End Sub
因此,.csv文件将在单独的工作簿中打开

如果您想直接将.csv内容导入工作簿,我建议您在此处引用该线程:

我从中编写了以下代码:

 Sub CSV_Import()
 Dim ws As Worksheet, strFile As String, sPath As String

 Set ws = ActiveWorkbook.Sheets("Sheet1") 'set to current worksheet name

 sPath = ThisWorkbook.Path & "\Site_survey_form2.csv"  '"\ your file name

  With ws.QueryTables.Add(Connection:="TEXT;" & sPath, 
  Destination:=ws.Range("A1"))  
 .TextFileParseType = xlDelimited
 .TextFileCommaDelimiter = True
 .Refresh

End Sub

当问题陈述只是“它不起作用”时,很难提供解决方案。请你的问题更完整地描述一下你预期会发生什么,以及这与实际结果有什么不同。请参阅,以获取关于什么是好的解释的提示。我无法编辑,所以我尝试在这里回答。我在这行中有一个错误:“blnImportData=importsv(Wb,“Sheet1”,“A1”)”,错误438:对象不支持此属性或方法。在定义对象引用时,只需使用
Set
。由于
Wb
是一个字符串,所以您不使用
Set
我删除了“Set”,但我仍然犯了同样的错误,因为我希望代码使用不同名称的多个Csv文件,这样您的代码对我就不起作用了。那么将其包装在子文件或函数中?有关示例,请参见编辑后的答案