如何使用Range.Value读取包含重音字母的Excel单元格?

如何使用Range.Value读取包含重音字母的Excel单元格?,excel,vba,Excel,Vba,我在Excel中有一个文件列表,我需要将其自动化,但对于名称中包含重音字母的文件,我无法做到这一点。 例如: 当Excel单元格包含字符串时:RADOŚĆOPORANKU.txt Range.Value读取的单元格内容为RADOSCOPORANKU.txt,重音字母被转换,即Ś转换为S,Ć转换为C。 Dirstring当然找不到那个文件 我的简单测试包含位于以下目录中的2个文件: D:\Andre\Szarada\用于Szarada\s\ A65和A65中的Algebraf NOCSIERPNI

我在Excel中有一个文件列表,我需要将其自动化,但对于名称中包含重音字母的文件,我无法做到这一点。 例如: 当Excel单元格包含字符串时:RADOŚĆOPORANKU.txt Range.Value读取的单元格内容为RADOSCOPORANKU.txt,重音字母被转换,即Ś转换为S,Ć转换为C。 Dirstring当然找不到那个文件

我的简单测试包含位于以下目录中的2个文件: D:\Andre\Szarada\用于Szarada\s\

A65和A65中的Algebraf NOCSIERPNIOWA.xlsx A66中的Algebraf RADOŚĆOPORANKU.xlsx 注意:单元格A65和A 66中只有大写文本

Sub test()
    Dim str, filename As String
    str = Range("A65").Value
    filename = "D:\Andre\Szarada\For Szarada\Awaiting\Algebraf " & str & ".xlsx"
    MsgBox Dir(filename)
End Sub
对于A65返回文件名,它可以正常工作;对于A66,它返回的文件没有找到带有重音字母的文件。 同样,如果我删除A66单元格和目录中实际文件名的重音字母,它也可以正常工作


我做错了什么?

如果要将文件从一个文件夹移动到另一个文件夹,请使用FileSystemObject

例如:

A1


在纯VBA中,您可以使用Name函数,但这里的有限测试表明,它在特殊字符方面也存在问题,正如MsgBox

了解FileSystemObject一样。同时也可以查看这个论坛上关于同一主题的各种QA。你能给我指一个提供答案的QA吗?我搜索了又搜索,我所能找到的是相反的,如何摆脱重音字母,而不是用什么VBA方法将Excel中的波兰语重音字母读入VBA字符串。在网站上搜索DIR UnicodeIt似乎我没有很好地解释。失败的不是Dir,而是我请求Dir查找的文件名的重音字母被Range.Value去掉了。因此,Dir当然找不到文件名中有这些重音字母的文件。我只想知道如何读取带有波兰口音字母的Excel单元格,而不必去除口音。你的问题在别处。Range.Value对任何Unicode字符都没有问题,也不会剥离或转换它们。谢谢Ron,这也是我的经历。如果不尝试通过Dir定位文件的目录,但指定它,fso.MoveFile将无法找到名称包含重音字母的文件。因此,似乎在VBA中,如果不先删除文件名中的重音字母,就无法完成此操作?@AndreSocha-Huh?使用该代码移动文件效果很好,重音符号保留在目标文件中。您是对的,它不是Range.Value,而是Dir和fso.MoveFile似乎都不能正确处理重音字母。@AndreSocha我提供的代码处理重音字符没有问题。抱歉,Ron,我误解了你的评论。是的,你的代码有效,谢谢。有没有建议我如何确认文件是否存在于目录中?在代码中使用Dir也会返回重音文件。
'Set reference to Microsoft Scripting Runtime
'  or, if this for distribution, convert to late-binding

Option Explicit
Sub fileMover()
    Dim FSO As FileSystemObject
    Dim FI As File, FO As File
    Dim sSrc As String, sDest As String
    Const sBasePath As String = "D:\Users\Ron\Desktop\"

sSrc = sBasePath & [A1] & ".txt"
sDest = sBasePath & "Temp\" & [A1] & ".txt"

Set FSO = New FileSystemObject

FSO.MoveFile sSrc, sDest

End Sub