Excel 2007 vba range.find 方法无法找到包含以下内容的单元格:8"(2 个字符长,发音:8 英寸)

Excel 2007 vba range.find method can't locate cell containing: 8" (2 chars long, pronounced: 8 inches)

在电子表格的特定 1 列范围内,我需要使用 Excel 2007 VBA 的 range.find 方法来定位包含 2 -character long 值:8"(在美国发音为八英寸)。.find 方法在一个 sub 中,它适用于它正在做的所有其他搜索,但它似乎找不到 8",或者实际上找不到带有尾随双引号的任何文本值。

在下面的代码中,最初 sComparisonText 包含 8"

我尝试使用 Chr(34)sComparisonText 的末尾添加 1 到 6 个双引号,但 .find 方法仍然 returns 没有。

各种搜索都注意到了 Chr(34) 方法,并且还堆叠了双引号:"""" 解析为 """"""" 解析为 ""等。我还研究了具有特殊转义字符的 .find 方法,但也没有成功。

If Right(sComparisonText, 1) = """" Then
    sComparisonText = sComparisonText & Chr(34) & Chr(34) & Chr(34) & Chr(34) & Chr(34) & Chr(34)
End If
Set rResult = rCT.Columns(InputColumn).Find(What:=sComparisonText, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If (rResult Is Nothing) Then  'Add a new row to the bottom of the rCT range

谁能告诉我哪里做错了?

非常感谢! 戴夫

range.find "8""" 

应该可以解决问题。末尾的前两个引号转义了实际的 " 字符,第三个引号终止了字符串。

首先要考虑的是使用 xlPart 而不是 xlWhole

第二件事是验证你确实有双引号而不是一对单引号。单击恶意单元格和 运行:

Sub WhatIsInThere()
    Dim st As String, msg As String
    Dim i As Long, CH As String

    st = ActiveCell.Text
    msg = Len(st)
    For i = 1 To Len(st)
        CH = Mid(st, i, 1)
        msg = msg & vbCrLf & CH & vbTab & Asc(CH)
    Next i
    MsgBox msg
End Sub

要查看使用尾部双引号查找内容的示例,请从空白工作表开始,然后 运行:

Sub EightInchNails()
    Dim DQ As String, WhereIsIt As Range
    DQ = Chr(34)
    Range("A15").Value = "8" & DQ

    Set WhereIsIt = Range("A:A").Find(what:="8" & DQ, after:=Range("A1"), LookIn:=xlValues, LookAt:=xlPart)

    If WhereIsIt Is Nothing Then
    Else
        MsgBox WhereIsIt.Address(0, 0)
    End If
End Sub

不清楚您为什么要转义不是字符串文字的内容。您需要在字符串文字中转义双引号的原因是 编译器 可以解析它。如果您只查找一个 ",则 .Find 函数只需要一个 "。如果您已经将一个字符串存储在一个包含 " 的变量中,请使用它。如果需要将字符串加一,可以使用 Chr$(34) 或转义字符串文字 """"。他们给你完全相同的结果字符串:

Dim sComparisonText As String
Dim rResult As Range

sComparisonText = 8 & Chr$(34) 
Set rResult = ActiveSheet.Cells.Find(What:=sComparisonText, LookIn:=xlValues, _
              LookAt:=xlWhole, SearchOrder:=xlByColumns, _
              SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
Debug.Print rResult.Address

...与...相同

sComparisonText = "8"""
Set rResult = ActiveSheet.Cells.Find(What:=sComparisonText, LookIn:=xlValues, _
              LookAt:=xlWhole, SearchOrder:=xlByColumns, _
              SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
Debug.Print rResult.Address

...与...相同

sComparisonText = 8 & """"

...等等

转义序列在编译器之外没有任何意义。