从 VBA 中的 csv 文件加载数据期间,将 2 个双引号替换为 1 个双引号

Replace 2 double quotes into 1 double quote during data load from csv file in VBA

我将 csv 文件中的行加载到数组中(Open dataFilePath For Input As #1 等等……)。加载在数组数据中的是 2 个双引号。示例:“”””(空字符串)、“”myText”、“”75823”。问题是后面的代码程序无法正确检测空数组元素或其他数据。我找到了如何将字符串开头和字符串结尾的 2 个双引号替换为 1 个双引号的方法:

For i = 0 To lastArrayIndex
    thisString = columnsDataInThisLine(i)
    theFirstStringSymbol = Left(thisString, 1)
    If theFirstStringSymbol = """" Then
        'Replace double double quotes in the string beginning and _
        'the end into single double quotes
        thisString = Mid(thisString, 2, Len(thisString) - 2) 
    End If
    columnsDataInThisLine(i) = thisString
Next i

在这段代码之后,我得到了我需要的东西——示例:“”(空字符串)、“myText”、“75823”,但也许我在从 csv 文件(编码或其他东西)加载数据期间遗漏了一些东西。也许在 csv 文件读取期间删除加载到数组字符串开头和结尾的这 2 个双引号是更简单的方法?

这个双引号是特定于语言的。如果这些是您想要避免的唯一字符并且您没有任何其他 "strange" 字符,那么您可以遍历 Excel 中单元格的字符并检查它们是否是非标准的(例如,不是前 128 个 ASCII 字符的一部分):

Public Sub TestMe()

    Dim stringToEdit    As String
    Dim cnt             As Long
    Dim myCell          As Range
    Dim newWord         As String

    For Each myCell In Range("A1:A2")
        newWord = vbNullString
        For cnt = 1 To Len(myCell)
            Debug.Print Asc(Mid(myCell, cnt, 1))
            If Asc(Mid(myCell, cnt, 1)) >= 127 Then
                'do nothing
            Else
                newWord = newWord & Mid(myCell, cnt, 1)
            End If
        Next cnt
        myCell = newWord
    Next myCell

End Sub

因此,假设您有这样的输入:

它会意识到,引号有点奇怪,不应该包含在原文中,因为它们不是 ASCII 中前 128 个单元的一部分 table。

在 运行 代码之后,您将得到一个空单元格和 75823。