gpt4 book ai didi

excel - VBA Dir 在名为 ".."或 Documents.xlsx 的目录中提取 Ghost 文件

转载 作者:行者123 更新时间:2023-12-01 05:27:15 24 4
gpt4 key购买 nike

我相当熟悉使用 VBA Dir 过程循环访问文件夹中的文件。通常,我没有问题,但在我正在处理的项目中,DIR 正在拾取一个文件,据我所知,该文件不存在。这最终会导致我的代码调试错误。

这是包含文件的文件夹的屏幕截图。 enter image description here

然而,当代码尝试执行打开时,它会出错(总是在先成功打开一个文件之后)并指出问题是由于某个名为 Documents.XLSX 的文件引起的。我很少使用 xlsx 类型,所以我不知道这个名字是从哪里来的。

Error VB Shows

奇怪的是,如果我将 VBA 设置为 debug.print,它会将名称打印为“..”,而不是 Document.xlsx 名称。

enter image description here

有人知道为什么会这样吗?

我确定它与打开和关闭文件有关,因为如果我删除此操作,代码 Debug.Prints 将正确地包含三个文件名。我考虑到关闭文件可能会挂起它,所以我在关闭后包含了 DoEvents,但没有改变。在运行下一行 myFile = Dir 之前,我什至在关闭文件后将宏停止了大约一分钟,但仍然没有解决问题。

关于为什么会这样或如何进一步解决问题的任何建议都将非常有帮助。

不幸的是,我什至没有解决方法。如果我设置为仅在 myFile <> ".."时执行,则可以跳过,但对于 ".."的消失和重新出现,会丢弃 "next"选项,导致循环无限期重复。代码非常标准。

Dim myFile, WB as Workbook
myFile = Dir(dirPath)

Do While (myFile <> "")

'I included this for my own research
Debug.Print myFile

'Opens workbook
'This next line is where the error happens
Set WB = Workbooks.Open(Filename:=dirPath & myFile)

'Macro does stuff

'Closes
WB.Close savechanges:=False
DoEvents

myFile = Dir

Loop

由于评论中的吉普车而更新我没有想到在不同的模块中提及,我有一个自定义函数,旨在确保用户在 Cell 中输入了有效的文件路径。我还应该提到我的 VBA 代码 'do Something 正在更新单元格,并且可能导致此自定义函数重新计算。

这段代码是....

Public Function isValidPath(FilePATH as String) as Boolean
If Right(FilePATH,1) <> "\" Then FilePATH = FilePATH & "\"

If Dir(FilePath, vbDirectory) <> vbNullString then isValidPath = True

End Function

谁想免费获得 ✔️?

最佳答案

一个文件夹总是¹包含两件事。 . 代表它自己,.. 代表它的父级。

如果您将 Dir 与 vbDirectory 参数一起使用,并像您所做的那样用反斜杠作为路径后缀,那么您将返回两个结果;一个 . 和一个 ..。不需要循环;要么存在,要么不存在。

如果您将 Dir 与不带反斜杠后缀的 vbDirectory 参数一起使用,那么您将返回一个结果;文件夹的名称。不需要循环;要么存在,要么不存在。

虽然可以将一个没有扩展名的文件命名为您要查找的文件夹,但在同一父文件夹中不能有一个文件夹和一个没有扩展名的文件。虽然不是万无一失,但这是一个合理的结论,如果它有误,那么无论如何您都应该仔细研究一下。

总而言之,如果您查找带或不带尾随反斜杠的文件夹,您将收到一个非零长度字符串作为结果,除非您有非常特殊的情况。

您的“助手”功能代码“按原样”应该没问题。

Public Function isValidPath(FilePATH as String) as Boolean

isValidPath = cbool(len(Dir(FilePath, vbDirectory)))

End Function

顺便说一句,如果您热衷于跳过错误,那么不管有没有尾部反斜杠,这都可以完成同样的事情(即保证文件夹存在于单个子文件夹级别)。

on error resume next
mkdir FilePATH
on error goto 0

¹ 如果我没记错我的 ms-dos 3.3,即使 c:\也有一个 .. 但我不记得它指向哪里。

关于excel - VBA Dir 在名为 ".."或 Documents.xlsx 的目录中提取 Ghost 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51889881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com