【问题标题】:VBA file = Dir() retrieving a gibberish filenameVBA 文件 = Dir() 检索乱码文件名
【发布时间】:2015-09-24 01:40:24
【问题描述】:

循环遍历目录中文件的代码块:

Dim file As Variant
file = Dir(directory)
While (file <> "")
  If (InStr(file, ".xlsx") > 0) And (InStr(file, "Percentage") = 0) And (InStr(file, aggregateFilename) = 0) Then
        Call fight_dynamics_by_percentage_buckets(aggregateFilename, directory, file, folderToRunMacro, num_buckets)
  End If
 file = Dir
Wend

在我的代码的前面,用户选择了一个存储一组文件的目录。在我的测试目录中,我有以下文件:

Analyzed.11.14.383.Chamber1.xlsx
Analyzed.11.14.383.Chamber2.xlsx
Analyzed.11.14.383.Chamber3.xlsx

当我运行宏时,程序将文件名提取为:

Analyzed.11.14.383#494E5A0.xlsx
Analyzed.11.14.383#494E5A1.xlsx
Analyzed.11.14.383#494E5A2.xlsx

我以前在以前的目录中使用过这个确切的代码,并且提取正确的文件名没有问题。

这是怎么回事?

【问题讨论】:

  • 什么操作系统?什么版本的 Excel?
  • 什么(Excel 除外)软件自动生成了工作簿,生成文件名的代码是什么?在我看来,你那里有一些 unicode。
  • @Jeeped 我也想知道——但看起来乱码部分是一个数字的十六进制表示,如果在一个编码中解码为“Chamber1”的 Unicode 字符串解码为另一个中的十六进制字符串。
  • 实际上问题似乎并非源自 Chamber,而是源自 Chamber 之前的时期(即句号)。它也可能是零长度空格或其他一些被错误地用作原子分隔符的稀有字符。 FWIW, A0 (#160;) 是一个不间断的空格。

标签: vba excel dir


【解决方案1】:

我没有看到您的代码有任何问题,而且它对我来说也可以正常工作。可能是特定系统的excel问题。您可以使用其他选项来获得相同的结果,以下是供您参考的代码。祝你有美好的一天

Set filesys = CreateObject("Scripting.FileSystemObject")
For Each sfile In filesys.GetFolder(directory).Files
    file = filesys.GetFileName(sfile)
    If (InStr(file, ".xlsx") > 0) And (InStr(file, "Percentage") = 0) And (InStr(file, aggregateFilename) = 0) Then
        Call fight_dynamics_by_percentage_buckets(aggregateFilename, directory, file, folderToRunMacro, num_buckets)
    End If
Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2017-09-15
    相关资源
    最近更新 更多