【问题标题】:Excel import from CSV by VBA from prompted location通过 VBA 从提示位置从 CSV 导入 Excel
【发布时间】:2015-05-22 20:23:30
【问题描述】:

我尝试通过 VBA 导入 csv 文件。该文件始终称为 data.csv,但它可以位于不同的文件夹中。因此,这段代码先提示路径,然后将file设为文件位置,但没有导入任何内容。怎么了?

合资

Sub View()

'Prompts Path
Application.FileDialog(msoFileDialogFolderPicker).Show
Path = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)

'Defining file
File = Path & "\data.csv"

Workbooks.Add

With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & File, _
    Destination:=Range("A1"))
    .TextFileTabDelimiter = True
    .TextFileDecimalSeparator = "."
End With

End Sub

【问题讨论】:

    标签: excel vba csv import


    【解决方案1】:

    这段代码有几个问题。在我的 excel 版本中,它不喜欢使用名称“路径”作为变量,所以我可能会更新它。但是,这对您来说似乎不是问题,但第二个问题是您使用的“范围”未正确定义。我猜它正在尝试使用当前工作簿中的范围。即使添加新工作簿,活动表也似乎与原始工作簿保持一致。此外,您需要刷新查询表。试试这个:

    Sub View()
    Dim mypath As String 
    Dim myfile As String
    Dim wb As Workbook
    Dim ws As Worksheet
    
    'Prompts Path
    Application.FileDialog(msoFileDialogFolderPicker).Show
    mypath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
    
    'Defining file
    myfile = mypath & "\data.csv"
    
    Set wb = Workbooks.Add
    Set ws = wb.Sheets("Sheet1")
    
    With ws.QueryTables.Add(Connection:= _
    "TEXT;" & myfile, _
        Destination:=ws.Range("A1"))
        .TextFileTabDelimiter = True
        .TextFileDecimalSeparator = "."
        .Refresh
    End With
    
    End Sub
    

    【讨论】:

    • 谢谢,问题可能出在设置的 wb 和 ws 部分。我的 vba 文件中不存在路径变量,我只是让它更通用以显示我的问题。
    • 另外,请参阅我关于刷新的说明。如果没有 .refresh 行,数据对我来说并不总是可见的。
    猜你喜欢
    • 2019-08-15
    • 2015-03-31
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2017-07-07
    相关资源
    最近更新 更多