2016-08-09 3 views
0

data on my Excel sheet Я хотел бы найти дату в столбце A. Это форма даты: "yyyy/mm/dd hh: mm: ss". Он всегда не найти ничего, но дата, что я ищу в колонке А. Это фрагмент моего кода:Найти значение даты в столбце VBA

Dim LastDay As Date 
Dim strdate As String 
Dim rCell As Range 

strdate = Format(LastDay, "yyyy/mm/dd hh:mm:ss") 

Set rCell = Cells.Find(What:=CDate(strdate), After:=Range("A1"), LookIn:=xlValues _ 
     , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 

If rCell Is Nothing Then 
MsgBox ("nothing") 
Else 

EDIT: Новый код в комментарии.

Sub Copy() 
    Dim LastDayRow As Long 
    Dim FirstDayRow As Long 
    Dim LastDay As Date 
    Dim FirstDay As Date 
    Dim rcell As Range 

    LastDayRow = Range("E" & Rows.Count).End(xlUp).Row 
    Range("E" & LastDayRow).Copy Range("G1") 
    FirstDayRow = Range("A" & Rows.Count).End(xlUp).Row 
    Range("A" & FirstDayRow).Copy Range("G2") 
    LastDay = Cells(LastDayRow, "E").Value 
    FirstDay = Cells(FirstDayRow, "A").Value 

    Set rcell = Cells.Find(What:=LastDay, After:=Range("A1"), LookIn:=xlFormulas _ 
       , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext) 

    If rcell Is Nothing Then 
     MsgBox ("nothing") 
    End If 

End Sub 
+1

Из кода вы предоставляете, не кажется, что вы какое-либо значение для вашего 'LastDay' переменной. – Carrosive

+0

Код u написал базу поиска на xlValue. Хранилище данных в ячейках фактически является просто номером. Поэтому вы не сможете найти его с помощью LookIn: = xlValue –

+0

Также может быть, что формат (конвертирует дату в строковый формат, и вы ищете дату – User632716

ответ

0

Проблема была в форме даты. «/» В этом формате даты: yyyy/mm/dd hh: mm: ss путают vba run. Эти строки кода в исходном файле решить эту проблему:

Sheet1.Range("A:A").Replace What:="/", Replacement:="." 
Sheet1.Range("A:A").NumberFormat = "yyyy/mm/dd hh:mm:ss" 
Sheet3.Range("E:E").Replace What:="/", Replacement:="." 
Sheet3.Range("E:E").NumberFormat = "yyyy/mm/dd hh:mm:ss" 
0

Типы дат хранятся как в Excel, так и в VBA в виде парных разрядов. Найдите двойное значение вместо даты, изменив параметр LookIn на xlFormulas. Вы также можете опустить параметр MatchCase (вы используете значение по умолчанию).

Set rCell = Cells.Find(What:=LastDay, After:=Range("A1"), LookIn:=xlFormulas _ 
     , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) 

Обратите внимание, что вы делаете некоторые бессмысленные работы здесь ...

strdate = Format(LastDay, "yyyy/mm/dd hh:mm:ss") 

... потому что вы просто бросить его назад к дате, когда вы делаете ваш поиск:

What:=CDate(strdate) 
+0

Я изменил то, что вы рекомендовали, но все еще не нашел дату в столбце A. Если я установил LastDay как Double, макрос остановится с сообщением об ошибке. – vergab

+0

@vergab - Ваш обновленный код работает отлично для меня. ошибка, вы получаете и где? – Comintern

+0

Значение rcell «ничего», но дата указана в столбце A. Это последняя дата в столбце E: 2016/08/02 18:16:21, и она также находится в столбце A – vergab

Смежные вопросы