Определение необходимости написания VBA If Then Statement и как исправить ошибку компиляции - PullRequest
0 голосов
/ 23 мая 2019

Попытка установить диапазон («заголовки») от ячейки, содержащей «Period», до ячейки, содержащей «Agent Split».В конце кода я выбираю все эти диапазоны, чтобы убедиться, что он работает правильно.

Я настроил следующий код, содержащий цикл For

Sub Rangeheaders_test()

 Dim r As Long
 Dim endRow As Long
 Dim endCell As Range
 Dim headers As Range

  With ActiveSheet

    endRow = 500
 For r = 1 To endRow

    If .Cells(r, "A").Value = "Period" Then
       Set endCell = .Rows(r).Find(What:="Agent Split", LookIn:=xlValues,_
    LookAt:=xlPart, After:=.Cells(r, "A"))

       Set headers = .Range(.Cells(r, "A"), endCell)
    End If
  Next r
   End With

    headers.Select

End Sub

Однако этот код прошелдиапазоны и выбрал только последний, когда я хочу выбрать их ВСЕ, чтобы проверить это.Поэтому я удалил цикл, который оставил мне следующее

  With ActiveSheet
   endRow = 500

  r = 1 To endRow

    If .Cells(r, "A").Value = "Period" Then
       Set endCell = .Rows(r).Find(What:="Agent Split", LookIn:=xlValues,_
    LookAt:=xlPart, After:=.Cells(r, "A"))

       Set headers = .Range(.Cells(r, "A"), endCell)
    End If
  End With

    headers.Select

Но теперь я получаю либо ошибку синтаксиса, либо ошибку компиляции для неожиданного с, или если закрыть, и я застрял.Нужно ли определять условие Тогда?Является ли утверждение If Then даже необходимым?Есть ли другой способ, которым я могу установить условия?

1 Ответ

0 голосов
/ 31 мая 2019

Я понял из проницательного комментария @Jun, что я пытался сохранить несколько диапазонов в переменной one , и именно здесь я ошибался.

После некоторых исследований я нашел метод Union, в котором я могу комбинировать свои диапазоны после их указания - что я и сделал, используя метод .Findnext

Sub findheader()

Dim startcell As Range
Dim rng As Range
    Set rng = Range("A1:A500")
    Set startcell = rng.Find(what:="Period", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)

Dim header1, header2, header3 As Range
    Set header1 = Range(startcell, startcell.End(xlToRight))

        Set startcell = rng.FindNext(startcell)
        Set header2 = Range(startcell, startcell.End(xlToRight))

             Set startcell = rng.FindNext(startcell)
             Set header3 = Range(startcell, startcell.End(xlToRight))

Dim headers As Range
    Set headers = Union(header1, header2, header3)

headers.Select


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