VBA Sub работает только один раз после редактирования - PullRequest
0 голосов
/ 13 марта 2019

В столбце A у меня есть блоки соответствующего текста, между которыми я хочу нарисовать границы. Блоки имеют разный размер, поэтому для различия между блоками я проверяю, отличаются ли значения двух соседних ячеек.

Сначала я попробовал это:

Sub draw_borders()


   Dim p As Range, a As Variant, b As Range, c As Range, d As Variant
   For Each p In Intersect(Range("A:A"), sht.UsedRange)
      a = p.Value
      Set c = Range(Cells(p.Row, p.Column), Cells(p.Row, p.Column))
      b = c.Offset(-1, 0)
      d = b.Value
      If a <> d Then
          Dim DataRange3 As Range
          Set DataRange3 = Range(Cells(p.Row, 1), Cells(p.Row, 2))
          DataRange3.Borders(xlEdgeTop).LineStyle = xlContinuous
      End If
   Next p
End Sub

Кстати, «шт» ранее определено как активный лист. Я продолжал получать сообщение об ошибке во время выполнения:

b = c.Offset(-1, 0)

Поэтому я попытался включить смещение в определение c, удалил определение b и отредактировал определение d.

Sub draw_borders()


   Dim p As Range, a As Variant, b As Range, c As Range, d As Variant
   For Each p In Intersect(Range("A:A"), sht.UsedRange)
      a = p.Value
      Set c = Range(Cells(p.Row, p.Column), Cells(p.Row, p.Column)).Offset(-1,0)

      d = c.Value
      If a <> d Then
          Dim DataRange3 As Range
          Set DataRange3 = Range(Cells(p.Row, 1), Cells(p.Row, 2))
          DataRange3.Borders(xlEdgeTop).LineStyle = xlContinuous
      End If
   Next p
End Sub

Это сработало ... но только один раз. Если я запустлю его снова, он выдаст мне ошибку времени выполнения:

Set c = Range(Cells(p.Row, p.Column), Cells(p.Row, p.Column)).Offset(-1,0)

Что не так с моим кодом?

Я только начал изучать vba на этой неделе, и у меня нет никакого опыта в программировании, так что мое форматирование может быть немного неправильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...