运行时错误91 vba

我必须得到一个正弦波的波峰和波谷值。 但数据有噪音。 我使用了下面的代码。 但是这个代码的一部分似乎有问题。 它给出运行时错误91。

这是代码。

Range("B2").Activate last = Application.CountA(Range("A:A")) Dim f, g, tp, tm As Double Dim zpo, zpt, zmo, zmt As Range f = 0 g = 0 For a = 0 To 2 For k = 0 To last If ActiveCell.Offset(k, a).Value > 0 Then If ActiveCell.Offset(k + 1, a).Value < 0 Then zpo = ActiveCell.Offset(k, a).Address zmo = ActiveCell.Offset(k + 1, a).Address tp = f + 1 f = tp End If End If If ActiveCell.Offset(k, a).Value < 0 Then If ActiveCell.Offset(k + 1, a).Value > 0 Then zmt = ActiveCell.Offset(k, a).Address zpt = ActiveCell.Offset(k + 1, a).Address tm = g + 1 g = tm End If End If If f > 0 Then If f = g Then Sheets("extract").Cells((5 * a) + 1, f).Value = WorksheetFunction.max("zpo:zpt") Sheets("extract").Cells((5 * a) + 2, f).Value = WorksheetFunction.Min("zmo:zmt") End If End If Next Next 

当它达到第二个if语句时有问题。

它说对象variables或块variables没有设置

你得到一个错误,因为你的代码试图把一个string放入一个对象:

  Dim...zmt As Range (<--- zmt is set as an object becuase Range is an object) zpt = ActiveCell.Offset(k + 1, a).Address (the "Address" is a string) 

一般来说,当你有一个对象时,你需要使用“set”,例如:

  set object1 = object2 

你的代码并不是这样,因为“string”不被认为是VBA中的一个对象,所以你在处理它们的时候不要使用“set”。

主要的问题是,当你定义一个行时:

  Dim zpo, zpt, zmo, zmt As Range 

你实际上做的是要求:“zpo,zpt,zmo”
是Varianttypes的variables,zmt是Rangetypes(一个对象)。

一旦你把zmt改成了一个变体,代码就起作用了,正如你看到的,因为一个string(Address)可以放到Variant中。