使用InStr搜索双引号

时间:2017-03-01 09:01:34

标签: excel-vba vba excel

我想查看一个字符串并检查它是否包含"

我尝试了If InStr(myString, """) > 0 Then但是VBA在某处将其视为缺失的"并返回给我

  

编译错误。预期列表分隔符

我该如何搜索该角色?

2 个答案:

答案 0 :(得分:2)

尝试使用Chr(34)

If InStr(myString, Chr(34)) > 0 Then

答案 1 :(得分:1)

MS Office 有 4 种不同类型的双引号,包括简单的文本引号和花哨的“智能”引号,因此如果您希望 VBA 代码始终如一地工作,您可能需要检查所有这些可能代表的字符双引号:

If InStr(inputText, Chr(34)) > 0 Or InStr(inputText, Chr(147)) > 0 Or InStr(inputText, Chr(148)) > 0 Or InStr(inputText, Chr(132)) > 0 Then
    MsgBox "Found double quotes"
Else
    MsgBox "Did NOT find any double quotes."
End If

这里是一个例子,我用一个函数来用普通的纯文本引号替换任何特殊/花哨的引号:

Dim d1 As String
Dim d2 As String
Dim d3 As String
Dim d4 As String

Sub FixFormatting()
    Dim inputText As String
    Dim outputText As String
    
    inputText = Range("A2").Text
    d1 = Chr(34)
    d2 = Chr(147)
    d3 = Chr(148)
    d4 = Chr(132)
    
    If InStr(inputText, d2) > 0 Or InStr(inputText, d3) > 0 Or InStr(inputText, d4) > 0 Then
        inputText = ReplaceFancyQuotes(inputText)
    End If
    outputText = inputText
    
    Range("C2").Value = outputText
End Sub

Function ReplaceFancyQuotes(s As String) As String
    s = Replace(s, d2, d1)
    s = Replace(s, d3, d1)
    s = Replace(s, d4, d1)
    ReplaceFancyQuotes = s
End Function