Excel VBA 运行-时间424和FIND命令

Excel VBA Run-time 424 and FIND command

这是我的第一个 post,我对编程还比较陌生 VBA。作为我较大代码工作的一部分,我有一个简单的子例程。我试图在一列中找到一串文本,激活该单元格,以便我可以在同一行中使用与活动单元格(找到的文本)(右侧 8 和 9 列)相同的值(整数),然后使用那些新的计算中的整数。我在代码 set rngNt 行中收到 运行 时间错误 424:需要对象 。我不明白我错过了什么。有什么建议么?它一定很简单。仅供参考,我的变量都定义在我程序的最顶部。

这可能更容易:

1) 在A列第i行找到zoinks1或zoinks 2。 Zoinks1 和 zoinks2 可能出现多次。然后找到第一个实例...

2) 从 A 列第 (i + 1) 行开始,在 A 列中向下搜索驴。驴子也可能出现多次,但我只想遇到驴子的下一行。 Zoinks 总是在驴子之前,另一个 zoinks 总是在驴子之后(想想行 A 到 C,D 到 G,H 到 M,等等)。

3) 激活包含驴的单元格(可能是不必要的步骤?)

4) 在计算中使用包含 donkey 的行中的列 H 和 I 值,在包含 zoinks 的行中使用列 H,结果答案在 zoinks 行列 M.

5) 重复查找 zoinks 然后查找 donkey 直到到达第 500 行。

' Define variable for use across all macros
Dim i As Integer
Dim j As Integer
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim rngNt As Range

Sub Countpassage()
Set ws1 = ThisWorkbook.Sheets("Data Figures & Other")
ws1.Activate

For i = 3 To ws1.Range("A500").End(xlUp).Row
    If ws1.Cells(i, 1).Value = "Zoinks1" Or _
    ws1.Cells(i, 1).Value = "Zoinks2" Then
    Set rngNt = ws1.Range(Cells(i + 1, 1), Cells(500, 1)).Find(What:="donkey", LookIn:=xlValues, LookAt:=xlPart, _
            SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
        ws1.Cells(i, 13).Value = (Log((ActiveCell.Offset(0, 8) / ActiveCell.Offset(0, 9)) / ws1.Cells(i, 8)) / Log(2))
    End If
Next i
End Sub

编辑:我已经删除了两个位置的 .Activate 并且 运行-time 424 不再发生。现在,我在这行代码收到 运行-time error '13' Type Mismatch:

ws1.Cells(i, 13).Value = (Log((ActiveCell.Offset(0, 8) / ActiveCell.Offset(0, 9)) / ws1.Cells(i, 8)) / Log(2))

我知道方程式适用于整数,因为我已经测试过它,但它似乎不适用于 ActiveCell.Offset 内含物。设置 rngNt 后,我​​不确定在不使用偏移命令的情况下如何调用计算所需的单元格。

在像您的代码那样使用工作表对象和范围时,您不需要 Activate 您的工作表或其他任何东西。

Activating 很慢。最好不惜一切代价避免它。

我手边没有 VBA,但我不认为 .Activate returns 有任何东西(更不用说范围了),所以它不会为 rngNg 分配任何东西。如果您确实需要激活它,请将其作为单独的命令执行。