用户单击单元格,提示用户找到文本文件。单元格值包含文件位置的路径

时间:2015-04-03 06:46:38

标签: excel vba excel-vba spreadsheet

我有一个文本数据文件,我将其下载到计算机上的某个位置。现在,在我的VBA脚本中,我的路径是硬编码的。如果可能的话,我想要的是用户在这种情况下单击工作表“Main”中的单元格(C5),当他/她这样做时,会弹出一个对话框提示用户导航到文本文件并选择它。用户选择文本文件后,我希望单元格C5值保存文本文件的文件路径。

我希望将C5的值替换为我在VBA脚本中的硬编码文件路径:

With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;\\psf\Home\Desktop\Temp\sample.txt", Destination:=Range( _
        "$A$1"))
        .Name = "fills"
        .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 = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = "|"
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

我希望C5的值进入Connection之后的部分:=我不知道该怎么办的部分,并希望得到帮助/输入。

这可能吗?

1 个答案:

答案 0 :(得分:3)

以下代码将在用户 右键单击 C5

时运行

第1部分

  • 右键单击工作表标签
  • 查看代码
  • 在下面的代码中复制并过去

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Dim strFileToOpen As String
If Target.Address(0, 0) <> "C5" Then Exit Sub

strFileToOpen = Application.GetOpenFilename _
(Title:="Please choose a file to place in C5 (pick Open)", _
FileFilter:="Text Files *.txt (*.txt),"

If strFileToOpen = "False" Then
    [c5].Value2 = "No file selected"
Else
    [c5].Value2 = strFileToOpen
End If
End Sub

第2部分

变化

With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;\\psf\Home\Desktop\Temp\sample.txt", Destination:=Range( _
        "$A$1"))

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