在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
我查看了下面的链接,这些样本都不适合我。
我必须在这里遗漏一些非常简单的东西,但我不知道它是什么!
编辑我的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中检查它们时,这两个变量似乎有所不同。
看起来第二个变量之后有一个尾随空格,即使我在它周围放置一个TRIM()。当我在立即窗口中查看两个变量时,两者看起来完全相同。也许问题是由于数据类型......不确定......
答案 0 :(得分:3)
当您使用查找功能(在VBA或Excel GUI中)时,应用程序会保存您上次使用的搜索首选项。因此,当您在VBA中使用.Find()
时,明确设置这些搜索参数始终是个好主意。
我们知道您的rngX
无法正常工作,因为Nothing
是LookAt:=
- 通常的旅行是通过不设置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