Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2010, 13:33   #1
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию Код не всегда выдает правильный результат

Всем привет!
В столбце А список дат.
В модуле листа есть код:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 And Target.Column = 2 Then
        Application.ScreenUpdating = False
        Dim ra As Range: Set ra = Columns(1)
        GSDate = [B1].Value
            If Not ra.Find(GSDate) Is Nothing Then
                Exit Sub
            Else
                Do While ra.Find(GSDate) Is Nothing
                    GSDate = GSDate + 1
                Loop
                MsgBox "В указанную дату торги не проводились! Выбрана ближайшая следующая дата торгового дня."
            End If
        [B1].Value = GSDate
        Application.ScreenUpdating = True
    End If
End Sub
Если в ячейку B1 ввести дату, а такой не будет с столбце А, то выбирается ближайшая следующая существующая дата.
Код ошибок не выдает, но иногда возвращает неправильный результат.
Например вбиваем 01.01.09, а выдает 02.01.09, хотя такой даты нет.
А вот при 01.01.10 выдает правильно - 11.01.10
В чем засада?
Вложения
Тип файла: zip Книга1.zip (22.8 Кб, 8 просмотров)
Maxx вне форума Ответить с цитированием
Старый 18.02.2010, 15:35   #2
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 And Target.Column = 2 Then
        Application.ScreenUpdating = False
        Dim ra As Range
        Dim gsdate As Date
        Set ra = Columns(1)
        gsdate = [B1].Value
            If Not ra.Find(gsdate, LookIn:=xlValues, lookat:=xlWhole) Is Nothing Then
                Exit Sub
            Else
                Do While ra.Find(gsdate) Is Nothing
                    gsdate = CDate(gsdate) + 1
                Loop
                MsgBox "В указанную дату торги не проводились! Выбрана ближайшая следующая дата торгового дня."
            End If
        [B1].Value = gsdate
        Application.ScreenUpdating = True
    End If
End Sub

попробуйте так
Dophin вне форума Ответить с цитированием
Старый 18.02.2010, 15:59   #3
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Dophin, благодарю! Теперь все замечательно!

Только вот жму на "Весы", а мне вылезает сообщение, что я не могу второй раз добавить Вам отзыв

Но все-равно, СПАСИБО!
Maxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильный ли код? anomals PHP 4 10.02.2010 14:06
результат выдает -Nan- Тонущий коржик Помощь студентам 2 25.11.2009 23:28
почему эта строка дает правильный результат pavelstraut Общие вопросы C/C++ 5 27.07.2009 13:43
Почему не выдает результат записи. Ну или бы хотя бы ошибку какую. Lorel PHP 2 01.12.2008 14:29
Копирование строк. Правильный ли код? LinuxUser Общие вопросы C/C++ 12 06.11.2007 17:33