Несоответствие типов Excel с VBA, чтобы скрыть определенные строки

Я понимаю, что уже есть ряд отличных ответов по борьбе с ошибками VBA TypeMismatch в Excel, но все они кажутся довольно зависящими от случая, и я, по общему признанию, слишком много сторонник VBA n00b, чтобы следовать им.

Итак, я подумал, сможете ли вы помочь мне в этом конкретном затруднительном положении: я составил книгу и я хочу, чтобы строки автоматически скрывались, если значение в столбце C меньше сегодняшней даты. * Я назначил следующий макрос для командной кнопки ActiveX: *


Sub Hide_PastOrders()
 Dim MyRange As Range, C As Range
 Application.ScreenUpdating = False
 Application.Calculation = xlCalculationManual
 Set MyRange = Range("d1:d1000")
 MyRange.EntireRow.Hidden = False
 For Each C In MyRange
     If IsDate(C.Value) And C.Value < Date Then
         C.EntireRow.Hidden = True
     End If
 Next
 Application.ScreenUpdating = True
 Application.Calculation = xlCalculationAutomatic
 End Sub

До недавнего времени он работал нормально, но теперь иногда приводит к несоответствию типа, и я не уверен, почему. Это только кажется проблемой на нескольких рабочих листах, и всем им назначен один и тот же макрос.

Я также реализовал командную кнопку ActiveX, чтобы «Показать все строки»:


Sub ShowAll_Click()
ActiveSheet.Cells.EntireRow.Hidden = False
End Sub

Не было никаких проблем с этим.

Кроме того, я не уверен, что это актуально, но я создал ряд внутренних ссылок в моем документе. т.е. набрал "= A5" в B5, чтобы, если есть изменения в нашей аренде для нескольких единиц оборудования, мне нужно было бы ввести информацию только один раз. Это очень неприятно, потому что каждый раз, когда я сталкиваюсь с ошибкой «Несоответствие типов», некоторые ячейки меняются на «= REF».

Пожалуйста, дайте мне знать, если я использую неправильный подход или у вас есть предложения!

Спасибо, Александра.


person user2668306    schedule 09.08.2013    source источник
comment
Если ответ Тарика сработал как шарм, пожалуйста, примите его.   -  person Jon Crowell    schedule 10.08.2013


Ответы (1)


Выражение в инструкции if не сокращается в VBA. Попробуй это:

If IsDate(C.Value) Then
     If  C.Value < Date Then
         C.EntireRow.Hidden = True
     End If
End If

См. http://en.m.wikipedia.org/wiki/Short-circuit_evaluation

person Tarik    schedule 09.08.2013
comment
Работал как шарм! Спасибо за оперативный ответ! - person user2668306; 10.08.2013
comment
Иногда я действительно не понимаю этот сайт, тем более, что люди на нем. Вы пытаетесь помочь кому-то и людям критиковать вас за это, даже не объясняя почему. Во всяком случае, я проголосовал за человека. На мой взгляд, ваш ответ хорош. - person Reafidy; 10.08.2013
comment
@Reafidy Не то чтобы я приложил много усилий для этого, но посмотрите на этот заголовок stackoverflow.com/questions/18046003/ и ноль. Удивительно, но я получил 50 баллов за пустяк: stackoverflow.com/questions/18092056/ Интересно, что меня держит ... - person Tarik; 10.08.2013
comment
+1. Продолжай, Тарик, всегда найдутся те, кто ценит, и те, кто не ценит! - person Ioannis; 10.08.2013
comment
Да, я понимаю ваше разочарование, взгляните на www.ozgrid.com/forum. Я там админ. Там есть действительно хорошие люди, пожалуйста. - person Reafidy; 10.08.2013