【问题标题】:Open file from explorer when importing csv (VBA)导入 csv (VBA) 时从资源管理器打开文件
【发布时间】:2015-08-08 08:47:23
【问题描述】:

我创建了一个按钮,可将特定 .csv 文件导入我的 Excel 工作表。但是,我想指定单击按钮时打开哪个文件。所以如果按下按钮:Excel打开资源管理器,用户可以指定打开哪个文件。

With ActiveSheet.QueryTables.Add(Connection:="TEXT;Path\20150728.csv", _
        Destination:=Range("$A$1"))
    .Name = "Tasks-Job--1g2MZtgw-Feike_15min_data-20150728"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 932
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft

我尝试实现以下代码:

Call Shell("explorer.exe" & " " & "Path", vbNormalFocus)

但我没能让它正常工作。有什么建议吗?

【问题讨论】:

  • 查看问题here 以获取示例或MSDN 帮助文章here(查看示例)。最重要的是,您无需掏腰包;有一个内置函数可以打开选择文件对话框,并允许您获取用户选择的文件。然后,您可以保存所选文件的路径并使用它来代替 Connection 上的硬编码值。

标签: vba excel


【解决方案1】:

您可以让 Excel 允许您使用 FileOpen 对话框选择文件:

With Application.FileDialog(msoFileDialogFilePicker)
    .Show
    strFileName = .SelectedItems(1)
End With

strFileName 包含所选文件的完整路径+文件名,然后您应该可以使用类似的东西

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strFileName, _
    Destination:=Range("$A$1"))

【讨论】:

    【解决方案2】:

    以下代码片段允许打开资源管理器并选择文件。但它没有打开文件并且系统挂起。它可能会帮助您进一步进步。

     Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, _
            ByVal lpFile As String, ByVal lpParameters As String, _
                ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    
    Sub test()
        Dim Tskrfile
    
        Tskrfile = Application.GetOpenFilename()
    
        If Tskrfile <> False Then
            ShellExecute 0, vbNullString, Tskrfile, vbNullString, vbNullString, vbNormalFocus
        End If
    End Sub
    

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      相关资源
      最近更新 更多