Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用单元格值(日期)导入文本文件_Vba_Excel - Fatal编程技术网

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

Vba 使用单元格值(日期)导入文本文件,vba,excel,Vba,Excel,我正在尝试使用单元格值将文本文件导入Excel工作簿,以确定要导入的文本文件。包含文本文件的目录将包含其他文本文件,其日期在文件名前面。(如“2018-03-06-FILENAME.txt”) 我希望用户能够在预定义的单元格中输入日期,并能够运行宏检查该单元格的值,然后导入与该值匹配的文件。我想我的代码遇到了一个问题,它看到的是日期代码,而不是文件名的值。不知道该怎么解决?(用户必须能够以人性化的方式输入日期,而不是“43164”。) 子导入() 将当前路径设置为字符串 将newPath设置为字

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

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

子导入()
将当前路径设置为字符串
将newPath设置为字符串
将当前文件设置为字符串
将currentDate设置为字符串
currentPath=“\\network\folder\”
newPath=“\\network\folder\Processed\”
'获取第一个文件
currentDate=Sheet1.范围(“A1”).值
currentFile=Dir(currentPath¤tDate&“*.txt”)
当前文件“”时执行此操作
“清除以前的数据
表2.激活
ActiveSheet.UsedRange.Clear
范围(“A1”)。选择
'处理文本文件
使用ActiveSheet.QueryTables.Add(连接:=_
“TEXT;”¤tPath¤tFile_
目的地:=范围(“$A$1”))
.Name=“数据”
.FieldNames=True
.TextFileTabDelimiter=True
.TextFileSemicolonDelimiter=True
.TextFileColumnDataTypes=数组(3,1,1,1,1,1,1,1,1,1,1,1,1,1)
.Refresh BackgroundQuery:=False
以
ActiveSheet.QueryTables(1).删除
'将文件移动到已处理的文件夹中
将currentPath和currentFile命名为newPath和currentFile
'获取下一个文件
currentFile=Dir
环
端接头
试试看

尽管如此,根据您的示例,您的代码中是否应该有-FILENAME位

你想要

2018-03-06-FILENAME.txt
但只给出:

currentPath & currentDate & ".txt"
因此,需要
currentPath&“-”¤tDate&“-”&FILENAME&“.txt”


假设文件名是一个变量。

currentDate=Sheet1.Range(“A1”)。值确实会给出Excel用于存储日期的顺序日期,即(43261)

改用
currentDate=Format(Sheet1.Range(“A1”).text,“YYYY-MM-DD”)和“FILENAME.txt”

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

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

示例:
如果instr(1,当前文件名字符串,currentDate,vbTextCompare),则
'如果找到文件名,则代码转到此处。

如果Excel中日期的值是数字而不是文本,则结束。请参阅此SO帖子以了解可能的解决方案。我完全忘了把通配符放在里面!它应该是“*.txt”。这仍然有效,对吗?文件名是一个变量吗?可以在currentdate之后使用通配符进行查找,但不能用于打开。注意:使用格式$作为类型化函数更有效。如果有多个匹配怎么办?你是说currentPath&“-”¤tDate&“-”&“*.txt”我不需要连字符。我现在有了currentPath¤tDate&“*.txt”,它可以工作了。不用担心。我在复制你给我的绳子。
2018-03-06-FILENAME.txt
currentPath & currentDate & ".txt"