使用单元格值确定通过VBA导入文本的目录

时间:2013-10-10 23:32:18

标签: excel vba

我录制了一个宏,允许我导入一个文本文件并用“|”分隔。但是,这个宏需要在一天内运行多次。它导入的文本文件的时间戳会在其结尾处发生变化。我想用我的vba代码引用一个单元格,该代码具有单元目录并根据当前时间进行更改。

Sub DataImport()
Dim LResult As String

LResult = Dir(ActiveSheet.Range("C6").Select)

ActiveSheet.Range("B8:G2000").Cells.ClearContents
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;LResult", Destination:= _
         Range("$B$8"))
        .Name = "CustomerEngagement_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = "|"
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

最重要的是我试图让单元格成为LResult中的目录并在导入中引用它...

思考?我目前正在研究FileSystemOperator,看看我是否可以使用它。

2 个答案:

答案 0 :(得分:0)

Dir()只返回文件名,因此您需要添加目录路径才能将文件传递给QueryTable创建。

像这样(未经测试)

Sub DataImport()

Const FOLDER_PATH as string = "C:\data\example\"
Dim LResult As String

'check for a .txt file with a name containing the value from C6
LResult = Dir(FOLDER_PATH & "*" & ActiveSheet.Range("C6").Value & "*.txt")

if Len(LResult)=0 Then
    msgbox "No matching file located"
    Exit sub
end if

ActiveSheet.Range("B8:G2000").Cells.ClearContents
With ActiveSheet.QueryTables.Add(Connection:= "TEXT;" & FOLDER_PATH & LResult, _
                                    Destination:= Range("$B$8"))
'...


End Sub

答案 1 :(得分:0)

不知道这个问题是否仍然相关,但解决方法是:

LResult = ActiveSheet.Range("C6").Value

"TEXT;" & LResult, Destination:= _