Выберите диапазон с VBA - застрял - PullRequest
0 голосов
/ 08 декабря 2018

Я получил небольшой проект в VBA и застрял в теме ниже.

Мне нужно выбрать диапазон от искомого значения до первой пустой ячейки в столбце H.

Выбранный диапазон должен выглядеть следующим образом

Выбранный диапазон в Excel:
Selected Range in Excel

Я искал конкретное значение в столбце A, и, если я нашел его, оно устанавливается как первая ячейка в диапазоне.(Это работает)

Затем мне нужно найти последнюю ячейку в диапазоне, которая является первой пустой ячейкой в ​​последнем столбце.

Это то, что я нашел и пытаюсь использовать

Sub Button()

    Dim StringToFind As String

    StringToFind = Application.InputBox("Enter string to find", "Find string")

    Worksheets("SS19").Activate
    ActiveSheet.Range("A:A").Select

    Set cell = Selection.Find(What:=StringToFind, After:=ActiveCell, _
                    LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

    cell.Select

    With Worksheets("SS19")

        Set rr = .Range(ActiveCell, .Cells(.Rows.Count, "H").End(xlUp))

        With rr
            rr.Parent.Range(.Cells(1, "A"), .Cells(.Rows.Count, "H").End(xlUp).Offset(1, 0)).Select
        End With

    End With

    If cell Is Nothing Then
        Worksheets("SS19").Activate
        MsgBox "String not found"
    End If

Я попытался найти первую пустую ячейку в предварительно выбранном диапазоне, чтобы он не искал весь столбец, но он не работал.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Я считаю, что использовать функцию сопоставления на листе проще, чем Range.Find при поиске в одном столбце.

Option Explicit

Sub Button()

    Dim stringToFind As String, m As Variant

    Worksheets("SS19").Activate
    stringToFind = Application.InputBox("Enter string to find", "Find string", Type:=xlTextValues)

    With Worksheets("SS19")

        m = Application.Match(stringToFind, .Range("A:A"), 0)

        If Not IsError(m) Then
            If Not IsEmpty(.Cells(m + 1, "H")) Then
                .Range(.Cells(m, "A"), .Cells(m, "H").End(xlDown).Offset(1)).Select
            Else
                .Range(.Cells(m, "A"), .Cells(m, "H").Offset(1)).Select
            End If
        End If

    End With
End Sub

Использование .End (xlDown) может быть проблематичным, если первая ячейка в строке m в столбце H было пустым, и это следует проверить, иначе выбор может оказаться слишком большим, возможно, вплоть до нижней части листа.Проверка непустой ячейки уловит эту потенциальную проблему.

0 голосов
/ 09 декабря 2018

Попробуйте это ...

Dim StringToFind As String
StringToFind = Application.InputBox("Enter string to find", "Find string")

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")

    With ws
        Dim findCel As Range
        Set findCel = .Range("A:A").Find(StringToFind, , , xlWhole, , , False, , False)

        Dim lRow As Long
        lRow = .Range(findCel.Address).Offset(, 7).End(xlDown).Row + 1

        Dim rr As Range
        Set rr = .Range("A" & findCel.Row & ":" & "H" & lRow)

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