2015-02-20 4 views
0

Я не могу на всю жизнь заставить меня работать.Excel VBA Application.Match между длинным временем и пользовательским форматом

У меня есть столбец r значений времени, отформатированных как «yyyy-mm-dd hh: mm: ss.000 AM/PM» (этот формат является одним из пользовательских форматов, которые можно выбрать для ячейки).

У меня также есть ячейка c, содержащая значение времени, отформатированное как «* hh: mm: ss» (формат первого времени).

Теперь я хочу найти, на каком ряду ic.Value находится в диапазоне r. Я делаю это с помощью

i = Application.Match(c.Value, r, 1) 

На этой строке я получаю «Ошибка выполнения„13“: Несоответствие типа» и я думаю, что это происходит потому, что клетки в r имеет пользовательский формат, или потому, что есть нет даты в c.Value.

Как я могу заставить это работать? Есть ли другой способ, которым я могу получить размещение c.Value в диапазоне r?

Код:

Sub test() 
Dim r As Range 
Set r = Range("A1:A10") 
Dim c As Range 
Set c = Range("B1") 

Dim i As Integer 
i = Application.Match(c.Value, r, 1) 'ERROR! 

End Sub 

РЕШИТЬ:

Я не знаю, Excel обрабатывает даты и времени как числа, так что я получил его на работу при сохранении c.Value как тип Double, прежде чем использовать его в функция.

+0

Матч повысит ошибку, если значение ** не найдено ** функцией совпадения. Вы можете заблокировать эту ошибку, если вы «Dim i as Variant» (так как «Match» может возвращать тип «Long/Integer» или «Error», вам нужен контейнер «Variant»). –

+0

Да, я знаю, но я знаю, что время там. Но мне удалось это решить, см. Править в OP :) – darksmurf

+0

Cheers. Вы можете добавить «ответ» на свой вопрос и пометить его как принятый :) –

ответ

1

РЕШИТЬ:

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