【问题标题】:excel vba open dialog to import csvexcel vba打开对话框导入csv
【发布时间】:2013-06-20 12:41:54
【问题描述】:

我在下面有这个由宏记录器生成的 vba 代码。它使用一些特定的列设置将 csv 文件导入到当前的 excel 工作表中。现在 csv 文件的路径被硬编码为“C:\Users\myuser\Desktop\logexportdata.csv”。如何更改此设置,以便出现一个对话框提示,要求用户查找要导入的 .csv 文件?

Sub Import_log()

With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\Users\myuser\Desktop\logexportdata.csv", Destination:=Range( _
    "$A$2"))
    .Name = "logexportdata"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 2
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(5, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With
End Sub

【问题讨论】:

    标签: vba excel csv dialog


    【解决方案1】:

    试试这个:

    Sub Import_log()
    
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & getFile, Destination:=Range( _
        "$A$2"))
        .Name = "logexportdata"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 2
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(5, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    End Sub
    
    
    Function GetFile() As String
    Dim filename__path As Variant
    filename__path = Application.GetOpenFilename(FileFilter:="Csv (*.CSV), *.CSV", Title:="Select File To Be Opened")
    If filename__path = False Then Exit Function
    GetFile = filename__path
    End Function
    

    【讨论】: