我在找一个有钥匙的手机。表格中的数据与.
SECTION1 KEY1
KEY2
KEY3
SECTION2 KEY4虽然键目前是唯一的,但我怀疑将来可能不会这样。所以我做了两次查找,一次是在A栏的部分:
Dim S As Range
Set S = ThisWorkbook.Sheets("Data").Range("A:A").Find("SECTION1", , xlValues, xlWhole)在这种情况下(14,1)太完美了。但是现在我试着寻找使用后的密钥,这有望减少碰撞的可能性:
Dim K As Range
Set K = ThisWorkbook.Sheets("Data").Range("B:B").Find("KEY1", S.Cells(S.Row - 1, 2), xlValues, xlWhole)这会返回类型不匹配。去掉“后”子句,它就能正常工作了。根据医生们的说法,这似乎应该是一个范围,但这一页令人困惑。
我尝试过这个子句的多个变体,包括S、S.Cells和其他,但是它们都给了我一个类型不匹配。有人有一个工作版本和解释是怎么回事吗?
发布于 2018-03-12 17:35:44
当您使用Offset参数时,您可能会想到After。作为经验的规则,After:=应该是.Find范围的一部分。
第二个问题是范围s只有一个列(可能还有一行)。您在这里引用的是第二篇专栏文章-- S.Cells(S.Row - 1, 2),它一点也不喜欢它。将2更改为1。
若要了解范围应该是什么样子,请在“查找”中分配“后”之前,尝试打印“后”的地址。
为了使整个代码正常工作,Debug.Print S.Cells(S.Row - 1, 2).Address应该在第二列(B)中给出一些单元地址。提示--如果希望After参数与列A中找到的单元格相同,请尝试类似于- S.Cells(1,1).Offset(0,1) for After:=。
发布于 2018-03-12 17:47:00
在查看文档时,请注意,之后必须是范围内的单个单元格。
因此,后置参数必须是在搜索的范围内的单个单元格(在您的示例中,B:B中的单元格)。
使用表示法S.Cells(S.Row - 1, 2),是的,您是指范围B:B内的单元格和SECTION1的同一行,但是S被引用到B:B之外的单元格,这可能是导致错误的原因。
这对我来说很管用:
Set K = ThisWorkbook.Sheets("Data").Range("B:B").Find("KEY1", Range("B" & S.Cells(1, 1).Row), xlValues, xlWhole)与您的相同,但符号Range("B" & S.Cells(1, 1).Row)确保您引用的是B:B中的一个单元格。
我知道,这有点烦人,但很管用。
https://stackoverflow.com/questions/49241149
复制相似问题