在 VBA 中导入 CSV 文件但无法保留外来符号

Import CSV file in VBA but cannot preserve foreign symbols

我正在尝试创建一个脚本,我在其中按下一个按钮,您会看到一个弹出窗口 window,您可以在其中 select 您的 .CSV 文件,然后将其加载到特定的目的地。到目前为止,我已经设法做到了我刚才所说的,但作为一个非英语用户,我的 .CSV 中的数据是用瑞典语编写的,我需要保留我们的 "special" 符号。

我尝试记录自己使用导入数据向导加载文件的过程,但我无法全神贯注于该代码以使其与变量一起工作 name/filepath。

到目前为止,我得到的是下面的代码,它可以快速轻松地加载文件,但不保留特殊符号,如“åäö”。

Dim ws As Worksheet, strFile As String

Set ws = Worksheets("Input")
ws.UsedRange.Clear
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")


With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _
Destination:=ws.Range("A1"))
    .TextFileParseType = xlDelimited
    .TextFileSemicolonDelimiter = True
    .PreserveFormatting = True
    .Refresh
End With

根据导入向导,.CSV 文件的来源是“65001:Unicode (UTF-8)”,我试图找到 .QueryTables 的属性以识别这一点。

我尝试过的许多事情之一是:

.QueryType = xlOLEDBQuery / xlTextImport
.TextFilePlatform = xlWindows / xlMSDOS

但是 .QueryType 只给我一个 "object doesn't support this method or property" 或 "invalid property assignment"。

感觉问题在于 Excel 不知道应该如何处理文件的编码(Unicode (UTF-8)),但我在这方面还很新手,所以我可能看错东西了

感谢@Ron Rosenfeld 引导我朝着正确的方向前进,我找到了解决方案。

只需要:

.TextFilePlatform = 65001

我确实在文件 > 选项 > 数据中为文本启用了 旧版 数据导入。 然后我在导入时记录了我的操作,在这段代码中我找到了上面那行解决了我的问题。 最终代码:

Dim ws As Worksheet, strFile As String

Set ws = Worksheets("Input")
ws.UsedRange.Clear
strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _
Destination:=ws.Range("A1"))
    .TextFileParseType = xlDelimited
    .TextFileSemicolonDelimiter = True
    .PreserveFormatting = True
    .TextFilePlatform = 65001
    .Refresh
End With