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 & """"
...等等
转义序列在编译器之外没有任何意义。
在电子表格的特定 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 & """"
...等等
转义序列在编译器之外没有任何意义。