2015-02-08 4 views
0

Мне нужно было получить значения гребня и корыта волны sin. Но данные имеют шум. Я использовал следующий код. Но, похоже, проблема в одной части кода. Он дает ошибку времени выполнения 91.ошибка времени выполнения 91 vba

Вот код.

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.

Это говорит изменяемый объект или блок переменной не установлено

+0

У какого кода линии есть линия? –

+0

, где адрес присваивается zmt строка 19 У этого нет проблем, когда он присваивает значение zpo или zmo. –

+0

Я изменил его на вариант, и он работает, но dunno, почему у него возникла проблема с определением диапазона –

ответ

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) 

Вообще говоря, когда у вас есть объект, вы необходимо использовать «набор», например:

set object1 = object2 

Это не так с вашим кодом, так как «строка» не считается быть объектом в VBA, поэтому вы не используете «set» при работе с ними.

Основная проблема заключается в том, что, когда вы определяете строку:

Dim zpo, zpt, zmo, zmt As Range 

что вы на самом деле делаете просит: «ЗПО, ЗПТ, ZMO»
быть переменные типа Variant и zmt - тип диапазона (объект).

Как только вы изменили zmt, чтобы быть вариантом, код работал, как вы сами видели, , потому что строка (адрес) может вставлять ножки в вариант.

Смежные вопросы