VBA"发现"函数找到错误的单元格

时间:2015-08-19 10:40:17

标签: excel vba excel-vba find

我写了一个VBA" Sub"这创建了一个按钮,该按钮可以完成多个工作(我只为第一个工作写下了代码,其他工作不相关)。

第一个作业应该找到包含字符串" Country"的单元格的位置。因此,它将找到包含字符串" Country"的单元格,然后它将找到该单元格的列号(bc)和行号(br)。

值为" Country"的单元格是在" I7"单元格,或数字格式单元格(7,9)。它没有错误,但我得到了不同的结果,如bc = 7和br = 1(" G1")。有趣的是,单元格" G1"是空的。

现在它给出的结果类似于" I4",它也是空的,如下所示。

The location of the target cell with the string "Country"

有没有人对这个bug有任何想法?

Private Sub Button1_Click()

    Dim b1 As Range
    Dim bc As Integer, br As Integer

    With Sheet5.Range("a1:z200")
    Set b1 = .Find(Name:="Country", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)

        If Not b1 Is Nothing Then
            bc = ActiveCell.Column
            br = ActiveCell.Row
            MsgBox (bc)

        End If
    End With

End Sub

2 个答案:

答案 0 :(得分:1)

如果您希望目标单元格处于活动状态,请添加激活:

If Not b1 Is Nothing Then
    b1.activate
    ...

您的代码可能会继续使用activecell,因此可以快速修复。

答案 1 :(得分:1)

Find方法不会更改活动单元格。你的代码大多是正确的,只需要得到行和& b1范围对象中的列:

Private Sub Button1_Click()

    Dim b1 As Range
    Dim bc As Integer, br As Integer

    With Sheet5.Range("a1:z200")
    Set b1 = .Find(Name:="Country", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)

        If Not b1 Is Nothing Then
            bc = b1.Column
            br = b1.Row
            MsgBox (bc)

        End If
    End With

End Sub
顺便说一句,您可能想要考虑使用更有意义的变量名称。在一个月左右的时间里,变量b1对你回到代码时可​​能没什么意义......