首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在VBA中执行a.Find(后)?

如何在VBA中执行a.Find(后)?
EN

Stack Overflow用户
提问于 2018-03-12 17:25:32
回答 2查看 6.2K关注 0票数 1

我在找一个有钥匙的手机。表格中的数据与.

代码语言:javascript
复制
SECTION1    KEY1
            KEY2
            KEY3
SECTION2    KEY4

虽然键目前是唯一的,但我怀疑将来可能不会这样。所以我做了两次查找,一次是在A栏的部分:

代码语言:javascript
复制
Dim S As Range
Set S = ThisWorkbook.Sheets("Data").Range("A:A").Find("SECTION1", , xlValues, xlWhole)

在这种情况下(14,1)太完美了。但是现在我试着寻找使用后的密钥,这有望减少碰撞的可能性:

代码语言:javascript
复制
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和其他,但是它们都给了我一个类型不匹配。有人有一个工作版本和解释是怎么回事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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:=

票数 2
EN

Stack Overflow用户

发布于 2018-03-12 17:47:00

在查看文档时,请注意,之后必须是范围内的单个单元格。

因此,后置参数必须是在搜索的范围内的单个单元格(在您的示例中,B:B中的单元格)。

使用表示法S.Cells(S.Row - 1, 2),是的,您是指范围B:B内的单元格和SECTION1的同一行,但是S被引用到B:B之外的单元格,这可能是导致错误的原因。

这对我来说很管用:

代码语言:javascript
复制
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中的一个单元格。

我知道,这有点烦人,但很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49241149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档