运行时错误91 vba

时间:2015-02-08 06:49:44

标签: excel 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语句时会出现问题。

它表示对象变量或块变量未设置

1 个答案:

答案 0 :(得分:1)

您遇到错误,因为您的代码尝试将字符串放入对象中:

  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)

一般来说,当你有一个对象时,你需要使用&#34; set&#34;,例如:

  set object1 = object2

您的代码不是这种情况,因为&#34;字符串&#34;不考虑 成为VBA中的一个对象,所以你不要使用&#34; set&#34;处理它们时。

主要问题是,当您定义一行时:

    Dim zpo, zpt, zmo, zmt As Range

你实际在做的是要求:     &#34; zpo,zpt,zmo&#34;
是变体类型和变量     ZMT 是一个范围类型(​​一个对象)。

一旦您将zmt更改为变体,代码就可以正常工作,如您所见, 因为一个字符串(地址)可以变成一个Variant。