как найти значение в диапазоне в коде листа - PullRequest
0 голосов
/ 19 апреля 2019

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

Я попытался указать на листе значения критерия, но это, казалось, не имело значения, поскольку я все еще получаю ту же ошибку.

    Range("Dcust").Offset(2, 0).End(xlDown).End(xlToRight).ClearContents
Dim shuttleNum As Range
Set shuttleNum = Range("Dsched").Offset(2, 0).End(xlDown).End(xlToRight)

    Set driverSheet = ActiveWorkbook.Sheets("Driver")
Dim DSnumView As Integer

DSnumView = driverSheet.Range("DSnumView").Value



'''''Here is where I get the error'''
If shuttleNum.Columns(2).Find(DSnumView, lookat:=xlWhole) Is Nothing Then
        MsgBox "You are not scheduled to drive this shuttle", vbCritical, "Error"
        Exit Sub
Else
    Dim ctable As Range
    Set ctable = Range("CTableStart").Offset(1,0).End(xlDown).Range("CTableStart").Offset(0, 3)
End If

1 Ответ

0 голосов
/ 20 апреля 2019

Эта строка кода:

Range("Dsched").Offset(2, 0).End(xlDown).End(xlToRight)

возвращает одну ячейку.

Таким образом, в основном shuttleNum устанавливается на одну ячейку и, следовательно, это: shuttleNum.Columns(2) выдаст вам ошибку, потому что в этом диапазоне есть только один столбец.

Если я правильно понимаю, что вы пытаетесь сделать, следующее должно помочь.

Предположим, у вас есть некоторые данные, которые начинаются с ячейки A1, но вы не знаете, где они заканчиваются. Например:

enter image description here

Чтобы получить диапазон, содержащий данные, который в данном случае равен A1:C5, вам необходимо выполнить следующее:

Dim sht As Worksheet
Dim rng As Range
Set sht = ThisWorkbook.Worksheets("Worksheet Name")
Set rng = sht.Range("A1")
Set rng = sht.Range(rng, rng.End(xlToRight)) 'A1:C1
Set rng = sht.Range(rng, rng.End(xlDown)) 'A1:C5

В качестве альтернативы вы можете объединить последние два шага в один:

Set rng = sht.Range(rng, rng.End(xlToRight).End(xlDown))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...