【问题标题】:Excel VBA Find function oddityExcel VBA 查找函数奇数
【发布时间】:2020-08-09 12:16:47
【问题描述】:

简而言之

  • 我正在为“psiTimBeamLabel1”搜索单列范围
  • 出于某种原因,Vba 的 .Find 函数正在查找“psiTimBeamLabel10”作为匹配项。

背景

我正在搜索一个命名范围 (rngCellsList),它是单列单元格。在失败的情况下 - 我正在寻找的值是“psiTimBeamLabel1”这个项目在列表中出现了几次。每次在列表中找到它时,我都会进行一些处理。我的代码解释如下:

Set rngCell = rngCellsList.Find("psiTimBeamLabel1")
strFoundCellAddr = rngCell.Address

Do 

   ... some processing

   Set rngCell = rngCellList.Find("psiTimBeamLabel1",rngCell)

Loop Until rngCell is Nothing or rngCell.Address = strFoundCellAddr

基本上

  1. 搜索范围以找到字符串的第一个实例
  2. 记下第一个实例的地址
  3. 开始一个循环并进行一些处理
  4. 在循环结束之前 - 再次搜索,盯着最近找到的位置
  5. 循环直到未找到,或者唯一的实例是第一个找到的位置

到目前为止,这一直很好。还有其他几个例子,列表中有多个,我的逻辑以前有效。

在这种特殊情况下,我在列表中有几个“psiTimBeamLabel1”实例。但我也有几个“psiTimBeamLabel10”——由于某种原因,在搜索“psiTimBeamLabel1”时,外观是 .Finding “psiTimBeamLabel10”

知道为什么或如何解决这个问题吗?

谢谢,肯

【问题讨论】:

  • 您必须搜索整个单元格内容,否则会匹配。
  • 尝试将rngCellList.Find("psiTimBeamLabel1",rngCell)更改为rngCellList.Find(What:="psiTimBeamLabel1", After:=rngCell, LookAt:=xlWhole
  • Find() 会记住上次使用时的参数,因此在 VBA 中使用时应始终包含至少 lookInlookAt 参数。
  • 该死的。当然。谢谢。

标签: excel vba


【解决方案1】:

请改用For..Each,因为Like 运算符允许您使用否定通配符。

For Each rngCell in rngCellsList
If rngCell Like "psiTimBeamLabel1[!0-9]" Then ...
Next rngCell

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多