【问题标题】:Is there a way to open CSV with VBA and choose the delimiter?有没有办法用 VBA 打开 CSV 并选择分隔符?
【发布时间】:2021-07-27 13:07:19
【问题描述】:

我有一个 CSV,其中的数据用分号“;”分隔我想用 VBA 在 Excel 中打开它。 就我而言,这个 VBA 代码将由来自不同位置的用户运行,所以我想编写一个对本地设置不敏感的代码,并在任何地方产生相同的输出。

我尝试了几个代码,但都不起作用。看完文档后我不明白为什么。

  • Set wb = Workbooks.Open(str_Path, Format:=6, Delimiter:=";")
  • Set wb = Workbooks.Open(str_Path, Format:=4)
  • Workbooks.Open Filename:=str_Path, Format:=xlCSV, Delimiter:=";"
  • Workbooks.OpenText str_Path, Semicolon:=True, DataType:=xlDelimited
  • Workbooks.OpenText str_Path, Local:=True

根据所有这些说明,工作簿已打开,但数据未正确分离。

例如,这是一个结果,它似乎将行分隔在“,”而不是“;”上因为我的号码“1,2”被拆分了:

非常感谢您的任何想法! :-)

祝你有美好的一天, 最大

【问题讨论】:

  • 如果文件是 .txt,解决方案 1 将有效,但对于 .csv 无效,不知道为什么。编辑:所有解决方案都适用于.txt,没有一个适用于.csv
  • 您应该使用 ADOStream。在这里你可以看到它是如何工作的stackoverflow.com/questions/67888283/… 如果需要,你可以在这里寻找其他字符集docs.microsoft.com/en-us/previous-versions/exchange-server/…
  • Related - 查看编辑。
  • 在使用旧版导入向导导入时录制宏。 (或使用 Power Query)。
  • 我不想导入我只需要打开一个 CSV 来修改它。当涉及到只读目的时,我已经在使用电源查询。

标签: excel vba csv delimiter


【解决方案1】:

导入函数来指定你的分隔符

更新了工作表分配

Function ImportCSVFile(FilePath As String, Optional Sheet As Worksheet, Optional Delimiter As String = ",")
    ' Requires Reference: Microsoft Scripting Runtime
    Dim RowNumber As Long: RowNumber = 0
    Dim Arr() As String

    Dim oFSO As New FileSystemObject
    Dim oFS As Variant: Set oFS = oFSO.OpenTextFile(FilePath)
    
    If Sheet Is Nothing Then Set Sheet = ActiveSheet
    With Sheet
        Do Until oFS.AtEndOfStream
            RowNumber = RowNumber + 1
            Arr = Split(oFS.ReadLine, Delimiter)
            .Range(.Cells(RowNumber, LBound(Arr) + 1), .Cells(RowNumber, UBound(Arr) + 1)) = Arr
        Loop
    End With
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2022-10-07
    • 2021-10-22
    • 2019-01-07
    • 2018-09-05
    相关资源
    最近更新 更多