Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Переменные равны но не равны. Как-то так. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Переменные равны но не равны. Как-то так. (Макросы/Sub)
Переменные равны но не равны. Как-то так.
bokr Дата: Четверг, 11.07.2019, 22:52 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте.

Две переменных типа Date имеют одно значение. Но оператор <> считает что они не равны. Как это понять?
К сообщению приложен файл: 8511144.png (55.8 Kb) · 6074126.xlsb (52.9 Kb)
 
Ответить
СообщениеЗдравствуйте.

Две переменных типа Date имеют одно значение. Но оператор <> считает что они не равны. Как это понять?

Автор - bokr
Дата добавления - 11.07.2019 в 22:52
anvg Дата: Пятница, 12.07.2019, 11:04 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток.
А какой смысл в вашем представленном файле, если код в нём не соответствует картинке?
 
Ответить
СообщениеДоброе время суток.
А какой смысл в вашем представленном файле, если код в нём не соответствует картинке?

Автор - anvg
Дата добавления - 12.07.2019 в 11:04
bokr Дата: Пятница, 12.07.2019, 12:45 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
anvg, извините, не пойму в чем несоответствие.

На картинке код с Листа3

[vba]
Код


Private Sub Worksheet_Calculate()

    Dim i As Long
    Dim ImpDate As Date
    Dim PrevDate As Date
    

        If Form1.tbStart = True Then
            If N = 0 Then
                N = 1
                
                With wsData
                    For i = 1 To 5
                        .Cells(N, i) = CDate(wsImp.Cells(i, 2))
                    Next i
                    
                    .Range("A1:E1").Copy Destination:=wsWork.Cells(1, 1)
                     
                    .Cells(N, 7) = MaxTime(.Range(.Cells(1, 2), .Cells(5, 2)))
               End With
            Else
                N = N + 1
                
                With wsData
                    For i = 1 To 5
                        ImpDate = CDate(wsImp.Cells(i, 2))
                        PrevDate = CDate(wsWork.Cells(1, i))
                        .Cells(N, i + 8) = ImpDate
                        If ImpDate <> PrevDate Then
                            wsWork.Cells(1, i) = ImpDate
                            .Cells(N, i) = ImpDate            'ImpDate òèïà Date
                            If .Cells(N, i) < .Cells(N - 1, 7) Then
                    .Cells(N, i).Interior.ColorIndex = 3
                            End If
                        End If
                    Next i
                    
                    .Cells(N, 7) = MaxTime(wsWork.Range(wsWork.Cells(1, 1), wsWork.Cells(1, 5))) ' MaxDate òèïà Date

                End With
            End If
        End If

End Sub

[/vba]


Сообщение отредактировал bokr - Пятница, 12.07.2019, 12:55
 
Ответить
Сообщениеanvg, извините, не пойму в чем несоответствие.

На картинке код с Листа3

[vba]
Код


Private Sub Worksheet_Calculate()

    Dim i As Long
    Dim ImpDate As Date
    Dim PrevDate As Date
    

        If Form1.tbStart = True Then
            If N = 0 Then
                N = 1
                
                With wsData
                    For i = 1 To 5
                        .Cells(N, i) = CDate(wsImp.Cells(i, 2))
                    Next i
                    
                    .Range("A1:E1").Copy Destination:=wsWork.Cells(1, 1)
                     
                    .Cells(N, 7) = MaxTime(.Range(.Cells(1, 2), .Cells(5, 2)))
               End With
            Else
                N = N + 1
                
                With wsData
                    For i = 1 To 5
                        ImpDate = CDate(wsImp.Cells(i, 2))
                        PrevDate = CDate(wsWork.Cells(1, i))
                        .Cells(N, i + 8) = ImpDate
                        If ImpDate <> PrevDate Then
                            wsWork.Cells(1, i) = ImpDate
                            .Cells(N, i) = ImpDate            'ImpDate òèïà Date
                            If .Cells(N, i) < .Cells(N - 1, 7) Then
                    .Cells(N, i).Interior.ColorIndex = 3
                            End If
                        End If
                    Next i
                    
                    .Cells(N, 7) = MaxTime(wsWork.Range(wsWork.Cells(1, 1), wsWork.Cells(1, 5))) ' MaxDate òèïà Date

                End With
            End If
        End If

End Sub

[/vba]

Автор - bokr
Дата добавления - 12.07.2019 в 12:45
Pelena Дата: Пятница, 12.07.2019, 13:30 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19184
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Действительно, не понятно, что надо сделать, чтобы дойти до этой строчки с проверкой


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеДействительно, не понятно, что надо сделать, чтобы дойти до этой строчки с проверкой

Автор - Pelena
Дата добавления - 12.07.2019 в 13:30
boa Дата: Пятница, 12.07.2019, 14:54 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
bokr,
Добавьте свою функцию инициализации объектных переменных в начале процедуры Worksheet_Calculate
[vba]
Код
Private Sub Worksheet_Calculate()
Init
' ...
[/vba]


 
Ответить
Сообщениеbokr,
Добавьте свою функцию инициализации объектных переменных в начале процедуры Worksheet_Calculate
[vba]
Код
Private Sub Worksheet_Calculate()
Init
' ...
[/vba]

Автор - boa
Дата добавления - 12.07.2019 в 14:54
bokr Дата: Пятница, 12.07.2019, 15:01 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Pelena,

должна быть нажата кнопка Старт формы Form1. Форма вызывается кнопкой с листа Data.

Чтобы сохранить исходные данные нужно закоментить очистку листа Import wsImp.Cells.Clear
в обработчике нажатаия кнопки Private Sub tbStart_Click() формы Form1.

Далее, при изменении 3-го столбца листа Import (у меня DDE-импорт, вы можете поменять 1 ячейку вручную), изменяется результат формулы Cells(1,1) листа3 Calculate и вызывается обработчик Private Sub Worksheet_Calculate().

При его втором вызове при N<>0 попадаем в искомую ветку. Она должна выполняться только при получении нового значения, т. е. ImpDate <> PrevDate. Но не тут то было.


Сообщение отредактировал bokr - Пятница, 12.07.2019, 15:48
 
Ответить
СообщениеPelena,

должна быть нажата кнопка Старт формы Form1. Форма вызывается кнопкой с листа Data.

Чтобы сохранить исходные данные нужно закоментить очистку листа Import wsImp.Cells.Clear
в обработчике нажатаия кнопки Private Sub tbStart_Click() формы Form1.

Далее, при изменении 3-го столбца листа Import (у меня DDE-импорт, вы можете поменять 1 ячейку вручную), изменяется результат формулы Cells(1,1) листа3 Calculate и вызывается обработчик Private Sub Worksheet_Calculate().

При его втором вызове при N<>0 попадаем в искомую ветку. Она должна выполняться только при получении нового значения, т. е. ImpDate <> PrevDate. Но не тут то было.

Автор - bokr
Дата добавления - 12.07.2019 в 15:01
bokr Дата: Пятница, 12.07.2019, 15:46 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
boa,

логика работы такая
при открытии формы вызывается Init
после этого в форме нажимается кнопка Старт
без нажатой кнопки Worksheet_Calculate() ничего не обрабатывает,

т.е. Init всегда выполняется до обработки данных в Worksheet_Calculate().
да и переменные ImpDate и PrevDate не присваивались бы без Init().


Сообщение отредактировал bokr - Пятница, 12.07.2019, 15:48
 
Ответить
Сообщениеboa,

логика работы такая
при открытии формы вызывается Init
после этого в форме нажимается кнопка Старт
без нажатой кнопки Worksheet_Calculate() ничего не обрабатывает,

т.е. Init всегда выполняется до обработки данных в Worksheet_Calculate().
да и переменные ImpDate и PrevDate не присваивались бы без Init().

Автор - bokr
Дата добавления - 12.07.2019 в 15:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Переменные равны но не равны. Как-то так. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!