Как искать ячейку, содержащую определенную дату? - PullRequest
1 голос
/ 01 мая 2019

Попытка поиска местоположения ячейки на определенную дату.

У меня есть диапазон дат в форме дд-мм-гг, и мне нужно найти ячейку с датой, выбранной из выпадающего меню. Я использовал стандартную функцию Range.Find, которая работает для поиска не дат, но при поиске дат возвращает ошибку 91: переменная объекта или переменная блока не установлены.

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

Я где-то читал о преобразовании даты, чтобы соответствовать внутреннему формату, используемому в Excel (мм / дд / гг), но это не имело значения.

'Date to be searched

Set SDate = Sheets("Data").Range("F1")

'find function

Set oRange = Sheets("Planning").Range("A1:A50").Find(What:=Sdate, lookat:=xlWhole)

'Return Address

MsgBox oRange.Address

Я ожидаю, что смогу найти местоположение ячейки и получить местоположение ячейки в форме А1 или (1,1). Оба будут работать.

Ответы [ 3 ]

1 голос
/ 01 мая 2019

Вы объединили ячейки, поэтому он возвращает Nothing, попробуйте:

Sub finddate()

Set Sdate = Sheets("Data").Range("F1")
Set SearchRange = Sheets("Planning").Range("A1:A50")

If Not IsError(Application.Match(Sdate, SearchRange, 0)) Then
    Set oRange = Cells(Application.Match(Sdate, SearchRange, 0), 1)
    MsgBox oRange.Address
End If

End Sub
0 голосов
/ 01 мая 2019

Еще один способ сделать это:

Sub findDate()
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("The name of your Worksheet")
Dim dateToFind As Date
dateToFind = sht.Range("F1").Value
Dim cell As Range
For Each cell In sht.Range("datesRng").Cells 'I am using a named range which contains the dates but you can use A1:A50 instead
    If cell.Value = dateToFind Then
        MsgBox cell.Address
    End If
Next cell
End Sub
0 голосов
/ 01 мая 2019

Комбинировать .Find со значениями даты немного сложно, как вы сами поняли.

Попробуйте следующее

Sub finddate()

'Date to be searched
Set SDate = Sheets("Data").Range("F1")

'find function
Set oRange = Sheets("Planning").Range("A1:A50").Find(What:=DateValue(Sdate), lookin:=xlFormulas)

'Return Address
MsgBox oRange.Address

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