0

我录制了一个宏,允许我导入一个文本文件并用“|”分隔它。但是,此宏需要在一天中运行多次。它正在导入的文本文件有一个在其末尾更改的时间戳。我想用我的 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 看看我是否可以使用它。

4

2 回答 2

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
于 2013-10-11T00:15:28.877 回答
0

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

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

和:

"TEXT;" & LResult, Destination:= _
于 2017-12-14T11:19:50.300 回答