Excel VBA查找方法出现问题?

3

我的工作表

我已经开发了一些依赖于相同宏的工作表。它将查找标题,并从所选列中复制列。

该工作表是用来比较两组不同的数据,VBA 中的查找函数被经常使用。

我的问题

问题出现在 Find 函数中,因为它引用了同一列,但是有两个不同的名称,这些名称有轻微的比较。

它发生在两列中,这两列具有名称上的比较,如下所示:

Sub CopyPasteDataLookingForHeader()

    Dim sht As Worksheet
    Set sht = Sheets("Put in data")

    'I'm trying to find the column header Total Lineamount within my sheet
    FindTotalLineVAT = sht.Range("1:1").Find("Total Lineamount").Address(False, False, xlA1)
    TotalLineVAT = Application.WorksheetFunction.Substitute(FindTotalLineVAT, 1, "")

    'FindTotalLineVAT will return Cell "J1"
    'TotalLineVAT will return column "J"

    'I'm trying to find the column header Total Lineamount excl VAT within my sheet
    FindTotalLineXVAT = sht.Range("1:1").Find("Total Lineamount excl VAT").Address(False, False, xlA1)
    TotalLineXVAT = Application.WorksheetFunction.Substitute(FindTotalLineXVAT, 1, "")

    'FindTotalLineXVAT will return Cell "J1"
    'TotalLineXVAT will return column "J"

End Sub

我的目标

我希望这个公式可以返回单元格和列的两个不同结果。由于名称在某种程度上有所不同,因此“查找”函数应该返回两组不同的单元格。

有人可以解释为什么“查找”函数没有搜索整个名称,而只搜索其中一部分吗?

请告诉我,非常感谢您的答复 :)

1个回答

1

默认情况下,在Find函数中,LookAt参数设置为xlPart,因此您将获得两次相同的结果。 尝试按照以下方式在Find函数中设置LookAt参数为xlWhole:

FindTotalLineVAT = sht.Range("1:1").Find("Total Lineamount", Lookat:=xlWhole).Address(False, False, xlA1)

FindTotalLineXVAT = sht.Range("1:1").Find("Total Lineamount excl VAT", Lookat:=xlWhole).Address(False, False, xlA1)

它现在应该按预期工作。


2
仅供参考,LookAt 没有默认值xlPart,它只是使用在使用find之前上次使用的选项。因此,如果您根本不指定LookAt,您永远不会知道您将得到什么。 - Pᴇʜ
2
@PatrickS 如果你会用到类似带有 "LookAt:=xlWhole" 的 VBA 代码,我建议你加一个虚拟查找,使用 "LookAt:=xlPart"。否则,Excel 将保存你的新设置,下一次当你在 Excel 中进行查找时,它只会检索包含完全匹配搜索查询的单元格。你可能会为此感到头痛,想知道为什么 Excel 说找不到 "Red",而你眼前的单元格确实有值为 "Redgate"。 - Brownish Monster
@BrownishMonster 这是一个很好的观点。默认使用上次使用的选项确实很烦人。 - Pᴇʜ
有人在Excel用户声音上已经提出了这个问题吗?我认为它应该有一个默认设置。 - Luuklag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接