最近被问到的question包含以下代码:
strFilename = Dir$(fPath & "*.xls")它用于查找、xls、和xlsx结尾的文件(成功)。
我的问题是,为什么会找到xlsx文件?它不遵循通配符模式匹配的正常规则。如果我没有看到这样的使用方式,我将(并多次)使用以下文件来结束xls和xlsx:
strFilename = Dir$(fPath & "*.xls*")我想,也许使用Dir$的模式匹配会自动地在搜索模式的末尾添加一个*的等价物--但经过"*.xl"的一些测试,我可以排除这一点。另外,为了使事情更加混乱,"*.xls"将不会获取xlsm或xlsb文件。
因此,这可能意味着Dir$对遗留文件后缀和当前文件后缀有一定的内建识别,或者应该包含一个内置的相似性/同义词列表。但这似乎是一种方式--因为"*.xlsx"不会找到xls文件。
有人知道是否是这样吗?还有其他人吗?它们在哪里都有记录吗?什么时候变的?
此外,如果我想创建一个只找到xls文件的,那么在不进行进一步检查的情况下,我该如何做呢?
在这个问题中,P.S. Dir和Dir$是可互换的。
发布于 2021-07-07 14:53:31
VBA中的Dir行为类似于命令shell上的。命令shell Dir与长名称(即在Windows中看到的名称)和短名称相匹配。如果您从未听说过这一点,请参见例如https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#short-vs-long-names。我找到的最好的文档是https://ss64.com/nt/syntax-wildcards.html --它只是声明“通配符匹配短文件名和长文件名”。
xlsx-file的短名称的扩展名是xls,这就是Dir查找文件的原因。
据我所知,没有什么可以做的,您必须手动检查真正的文件名。另见https://stackoverflow.com/a/66674917/7599798
https://stackoverflow.com/questions/68287857
复制相似问题