使用单元格值(日期)导入文本文件

时间:2018-03-06 19:13:14

标签: excel vba excel-vba

我正在尝试使用单元格值将文本文件导入Excel工作簿,以确定要导入的文本文件。容纳文本文件的目录将包含其他文本文件,其日期前置于文件名。 (例如“2018-03-06-FILENAME.txt”)

我希望用户能够在预定义的单元格中输入日期,并且能够运行检查该单元格值的宏,然后导入与该值匹配的文件。我想我的代码遇到了日期代码的问题,而不是文件名的值。不确定如何解决这个问题? (用户必须能够以人性化的方式输入日期,而不是“43164”。)

Sub Import()

Dim currentPath As String
Dim newPath As String
Dim currentFile As String
Dim currentDate As String

currentPath = "\\network\folder\"
newPath = "\\network\folder\Processed\"

' Get the first file

    currentDate = Sheet1.Range("A1").Value
    currentFile = Dir(currentPath & currentDate & "*.txt")
    Do While currentFile <> ""

' Clear previous data

    Sheet2.Activate
    ActiveSheet.UsedRange.Clear
    Range("A1").Select

' Process text file

    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & currentPath & currentFile, _
        Destination:=Range("$A$1"))
        .Name = "Data"
        .FieldNames = True
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileColumnDataTypes = Array(3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .Refresh BackgroundQuery:=False
    End With

    ActiveSheet.QueryTables(1).Delete

' Move file into Processed folder

    Name currentPath & currentFile As newPath & currentFile

' Get the next file

    currentFile = Dir
    Loop

End Sub

2 个答案:

答案 0 :(得分:1)

尝试

2018-03-06-FILENAME.txt

虽然根据你的例子,你的代码中应该有一个-FILENAME位吗?

你想要

currentPath & currentDate & ".txt"

但是只给:

currentPath & "-" & currentDate & "-" & FILENAME & ".txt"

所以,需要{{1}}

假设FILENAME是一个变量。

答案 1 :(得分:0)

currentDate = Sheet1.Range("A1").Value确实会提供Excel用于存储日期的顺序日期I.E.(43261)

改为使用currentDate = Format(Sheet1.Range("A1").text, "YYYY-MM-DD") & "FILENAME.txt"

您还可以使用debug.print currentdate检查变量中存储的内容,然后使用Ctrl+G控制台在宏执行后显示打印值。

我强烈建议使用instr函数查找文件名中的日期,而不是直接比较它们,除非您的文件日期不是唯一的。还要记住使用TextCompare模式进行非大小写敏感的比较。

示例:If instr(1, CURRENT FILENAME STRING, currentDate, vbTextCompare) then 'if filename is found then code goes here. end if