Вставить строку между двумя значениями в столбце A - PullRequest
0 голосов
/ 09 июля 2020

Пытаюсь выполнить проверку - выделена ли ячейка в пределах диапазона. Диапазон - это в основном все строки между двумя словами в столбце A.

CheckIfCellIsInBetween "OWN WORK FIRST", "OWN WORK LAST", 266

Таким образом, если выбранная ячейка находится между «СОБСТВЕННАЯ РАБОТА ПЕРВАЯ» и «СОБСТВЕННАЯ РАБОТА ПОСЛЕДНЯ». Код должен работать, иначе должно отображаться сообщение об ошибке. Я знаю, что это неверно If foundA Is Nothing Or foundB Is Nothing Then, но что это должно быть?

Текущий код:

Sub CheckIfCellIsInBetween(statementA, statementB, GanttDataRow)

    Dim foundA As Range, _
        foundB As Range

    With ActiveSheet.Columns(1)
        Set foundA = .Find(statementA)
        If Not foundA Is Nothing Then
            Set foundB = .Find(statementB, after:=foundA, searchdirection:=xlPrevious)
        End If
    End With

    If foundA Is Nothing Or foundB Is Nothing Then
        MsgBox "You are trying to paste to wrong section, please go to Own Work section"
    Else
        ThisWorkbook.Worksheets("GanttData").Rows(GanttDataRow).Copy
        ThisWorkbook.Worksheets("GanttChart").Range("A" & ActiveCell.Row).insert
    End If

End Sub

Текущий код не выполняет проверку правильно, он вставляется где угодно, потому что текущий оператор всегда истинен в моем случае как то не так.

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Вот что сработало:

Sub CheckIfCellIsInBetween(FirstStatemement, LastStatemement, GanttDataRow)
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Dim StartRange, EndRange As Range
    Set StartRange = ActiveSheet.Range("A:A").Find(what:=FirstStatemement, lookat:=xlPart)
    Set EndRange = ActiveSheet.Range("A:A").Find(what:=LastStatemement, lookat:=xlPart)

    If ActiveCell.Row > StartRange.Row And ActiveCell.Row < EndRange.Row Then
        ThisWorkbook.Worksheets("GanttData").Rows(GanttDataRow).Copy
        ThisWorkbook.Worksheets("GanttChart").Range("A" & ActiveCell.Row).insert
    Else
        MsgBox "You are trying to paste to wrong section, please go to Own Work section", vbExclamation, "Wrong section alert"
    End If
    
    ThisWorkbook.Application.CutCopyMode = False
   
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
End Sub
0 голосов
/ 09 июля 2020

Попробуйте вместо этого проверить это:

Sub CheckIfCellIsInBetween(statementA, statementB, GanttDataRow)
If GanttDataRow > Application.WorksheetFunction.Match(statementA, Range("A:A"), 0) _
    And GanttDataRow < Application.WorksheetFunction.Match(statementB, Range("A:A"), 0) Then
    MsgBox "Correct selection"
Else
    MsgBox "Wrong selection"
End If
End Sub

Это предполагает, что оператор A и оператор B гарантированно находятся в столбце A, в противном случае произойдет ошибка. Если нет, вы можете добавить быструю предварительную проверку или ловушку ошибок.

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