查找不返回感兴趣的范围

时间:2017-01-26 16:24:07

标签: vba excel-vba excel

在Excel 2010中,我试图让这个小脚本起作用。

netstat -l

我知道'searchVal'是正确的,我知道'findVal'是正确的,我知道'resultVal'是正确的。此外,rngX定义为范围。但是,每次运行时,rngX始终为Nothing。 ID应设置为找到'resultVal'的行,左边是一个单元格。

我尝试了另一种方式,结果完全相同。

 If searchVal = findVal Then
    Set rngX = Worksheets("NEW Format").Range("C:C").Find(What:=resultVal, LookIn:=xlValues)
    ID = rngX.Offset(0, -1).Value
 End If

我查看了下面的链接,这些样本都不适合我。

http://www.globaliconnect.com/excel/index.php?option=com_content&view=article&id=112:find-method-in-excel-vba-find-multiple-occurrences-find-method-to-vlookup-find-date&catid=79&Itemid=475

我必须在这里遗漏一些非常简单的东西,但我不知道它是什么!

编辑我的OP:我也试过了。

 On Error Resume Next
 If searchVal = findVal Then
    Set rngFindValue = ActiveSheet.Range("C1:C100").Find(What:=resultVal, After:=ActiveSheet.Range("C1"), LookIn:=xlFormulas)
    ID = rngFindValue.Address
    ID = rngFindValue.Offset(0,-1)
 End If

在立即窗口中,我可以看到cell = resultVal。我仍然不明白为什么这不起作用。

我发现了一些有趣的东西。当我在Watch Window中检查它们时,这两个变量似乎有所不同。

enter image description here

看起来第二个变量之后有一个尾随空格,即使我在它周围放置一个TRIM()。当我在立即窗口中查看两个变量时,两者看起来完全相同。也许问题是由于数据类型......不确定......

2 个答案:

答案 0 :(得分:3)

当您使用查找功能(在VBA或Excel GUI中)时,应用程序会保存您上次使用的搜索首选项。因此,当您在VBA中使用.Find()时,明确设置这些搜索参数始终是个好主意。

我们知道您的rngX无法正常工作,因为NothingLookAt:= - 通常的旅行是通过不设置On Error Resume Next参数来定义您是否在搜索范围内寻找完整或部分匹配。

最后,摆脱 int cardtype = int.Parse(rbcard.SelectedItem.Text); - 你永远不应该用它来“修复”问题,只能处理你已经陷入和处理的错误。

答案 1 :(得分:1)

您可以使用Clean来满足此要求(删除换行符)

另外,值得一看Remove leading or trailing spaces in an entire column of data

来自here

  

每次使用此方法时,都会保存LookIn,LookAt,SearchOrder和MatchByte的设置

Dim resultVal As String
Dim rng1 As Range

resultVal = "mystr" & Chr(10)
resultVal = Application.Clean(resultVal)

Set rng1 = ActiveSheet.Range("C1:C100").Find(resultVal, ActiveSheet.Range("C1"), xlFormulas, xlWhole)
If Not rng1 Is Not Nothing Then
    ID = rng1.Address
End If