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

Вход

Регистрация

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

 

= Мир MS Excel/Конфликт VBA и проверки данных. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Конфликт VBA и проверки данных.
light26 Дата: Вторник, 13.08.2013, 09:49 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1351
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Здравствуйте, уважаемые знатоки.
В файле используется макрос, для подсчета нарастающим итогом.
Хотел установить проверку данных для запрета ввода дробных чисел в определенные ячейки (выделено желтым), но при вводе сначала ошибочных данных, а затем верных (например, сначала 0,1, затем 1), нарастающим итогом прибавляет 3. Как это обойти?
К сообщению приложен файл: 5197692.zip (38.1 Kb)


Я не волшебник. Я только учусь
 
Ответить
СообщениеЗдравствуйте, уважаемые знатоки.
В файле используется макрос, для подсчета нарастающим итогом.
Хотел установить проверку данных для запрета ввода дробных чисел в определенные ячейки (выделено желтым), но при вводе сначала ошибочных данных, а затем верных (например, сначала 0,1, затем 1), нарастающим итогом прибавляет 3. Как это обойти?

Автор - light26
Дата добавления - 13.08.2013 в 09:49
Саня Дата: Вторник, 13.08.2013, 12:13 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
проверку долой
обработчик меняем:
[vba]
Код
        If Target.Address Like "*" & a(i) & "*" Then
             With Target
                 Application.EnableEvents = False
                 ActiveSheet.Unprotect
              
                 '============================================
                 If bCelyi(.Value) Then
                     .Offset(, -2) = .Offset(, -2) + .Value
                     .Offset(, -4) = .Offset(, -4) + .Value
                 Else
                     MsgBox "Болт, дядя", vbCritical
                     Application.Undo
                 End If

                 Debug.Print .Address & " Like *" & a(i) & "*"
                 '============================================

                 ActiveSheet.Protect
                 Application.EnableEvents = True
             End With
             Exit For
         End If
[/vba]

в этот же модуль вниз пишем всп. функцию:
[vba]
Код
Private Function bCelyi(vVal) As Boolean
     If IsNumeric(vVal) Then
         If Int(vVal) = vVal Then
             bCelyi = (vVal >= 0)
         End If
     End If
End Function
[/vba]
 
Ответить
Сообщениепроверку долой
обработчик меняем:
[vba]
Код
        If Target.Address Like "*" & a(i) & "*" Then
             With Target
                 Application.EnableEvents = False
                 ActiveSheet.Unprotect
              
                 '============================================
                 If bCelyi(.Value) Then
                     .Offset(, -2) = .Offset(, -2) + .Value
                     .Offset(, -4) = .Offset(, -4) + .Value
                 Else
                     MsgBox "Болт, дядя", vbCritical
                     Application.Undo
                 End If

                 Debug.Print .Address & " Like *" & a(i) & "*"
                 '============================================

                 ActiveSheet.Protect
                 Application.EnableEvents = True
             End With
             Exit For
         End If
[/vba]

в этот же модуль вниз пишем всп. функцию:
[vba]
Код
Private Function bCelyi(vVal) As Boolean
     If IsNumeric(vVal) Then
         If Int(vVal) = vVal Then
             bCelyi = (vVal >= 0)
         End If
     End If
End Function
[/vba]

Автор - Саня
Дата добавления - 13.08.2013 в 12:13
light26 Дата: Вторник, 13.08.2013, 13:34 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1351
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Привет, Саш.
Спасибо за помощь. Ща испытаю.
Вопрос пока такой: а чем используемый мной обработчик плох? И почему макрос так себя ведет?


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Вторник, 13.08.2013, 13:36
 
Ответить
СообщениеПривет, Саш.
Спасибо за помощь. Ща испытаю.
Вопрос пока такой: а чем используемый мной обработчик плох? И почему макрос так себя ведет?

Автор - light26
Дата добавления - 13.08.2013 в 13:34
RAN Дата: Вторник, 13.08.2013, 13:40 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Вопрос пока такой: а чем используемый мной обработчик плох?

Тем, что не работает. :D


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Вопрос пока такой: а чем используемый мной обработчик плох?

Тем, что не работает. :D

Автор - RAN
Дата добавления - 13.08.2013 в 13:40
light26 Дата: Вторник, 13.08.2013, 13:45 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1351
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Тем, что не работает.

Андрей, как всегда, в своем репертуаре...
Работает мой вариант. и вполне не плохо справляется с поставленной задачей


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Тем, что не работает.

Андрей, как всегда, в своем репертуаре...
Работает мой вариант. и вполне не плохо справляется с поставленной задачей

Автор - light26
Дата добавления - 13.08.2013 в 13:45
RAN Дата: Вторник, 13.08.2013, 13:49 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Конечно работает. Да так усердно, что с первого раза остановиться не может. :p


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеКонечно работает. Да так усердно, что с первого раза остановиться не может. :p

Автор - RAN
Дата добавления - 13.08.2013 в 13:49
Саня Дата: Вторник, 13.08.2013, 13:50 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Вопрос пока такой: а чем используемый мной обработчик плох? И почему макрос так себя ведет?

происходит именно конфликт, не знаю, как у других, у меня при попытке ввести дробное число обработчик отрабатывает дважды, если на проверке нажать "Отмена" и в два раза больше количества нажатий "Повторить", но в Таргете всегда начальное значение.

По логике это баг. Уровень проверки данных я не могу контролировать, поэтому удаляем и эмулируем.

ps
да, кстати, посмотри в окно Immediate:
$I$146 Like *$I$14*

не думаю, что это нормально.
 
Ответить
Сообщение
Вопрос пока такой: а чем используемый мной обработчик плох? И почему макрос так себя ведет?

происходит именно конфликт, не знаю, как у других, у меня при попытке ввести дробное число обработчик отрабатывает дважды, если на проверке нажать "Отмена" и в два раза больше количества нажатий "Повторить", но в Таргете всегда начальное значение.

По логике это баг. Уровень проверки данных я не могу контролировать, поэтому удаляем и эмулируем.

ps
да, кстати, посмотри в окно Immediate:
$I$146 Like *$I$14*

не думаю, что это нормально.

Автор - Саня
Дата добавления - 13.08.2013 в 13:50
light26 Дата: Вторник, 13.08.2013, 15:02 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1351
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
не знаю, как у других, у меня при попытке ввести дробное число обработчик отрабатывает дважды

И у меня.
не думаю, что это нормально.

возможно, но работает. Без сбоев.

Твой вариант проверки я не могу использовать. Ведь для некоторых ячеек, где единицы измерения тыс. шт. и км, значения будут вводиться дробями


Я не волшебник. Я только учусь

Сообщение отредактировал light26 - Вторник, 13.08.2013, 15:06
 
Ответить
Сообщение
не знаю, как у других, у меня при попытке ввести дробное число обработчик отрабатывает дважды

И у меня.
не думаю, что это нормально.

возможно, но работает. Без сбоев.

Твой вариант проверки я не могу использовать. Ведь для некоторых ячеек, где единицы измерения тыс. шт. и км, значения будут вводиться дробями

Автор - light26
Дата добавления - 13.08.2013 в 15:02
RAN Дата: Вторник, 13.08.2013, 15:24 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Вадим, открой секрет, зачем в ячейках с дробями этот макрос запускать?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВадим, открой секрет, зачем в ячейках с дробями этот макрос запускать?

Автор - RAN
Дата добавления - 13.08.2013 в 15:24
light26 Дата: Вторник, 13.08.2013, 16:57 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1351
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Вадим, открой секрет, зачем в ячейках с дробями этот макрос запускать?

Правильно. не нужно. Но ты ж меня знаешь, я дуб :)
Буду, конечно экспериментировать, направление указано...


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Вадим, открой секрет, зачем в ячейках с дробями этот макрос запускать?

Правильно. не нужно. Но ты ж меня знаешь, я дуб :)
Буду, конечно экспериментировать, направление указано...

Автор - light26
Дата добавления - 13.08.2013 в 16:57
light26 Дата: Четверг, 15.08.2013, 15:44 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1351
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Странная штука. Суммирует в ячейки E140 и G 140. А не должен


Я не волшебник. Я только учусь
 
Ответить
СообщениеСтранная штука. Суммирует в ячейки E140 и G 140. А не должен

Автор - light26
Дата добавления - 15.08.2013 в 15:44
_Boroda_ Дата: Четверг, 15.08.2013, 16:51 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
If Target.Address Like "*" & a(i) & "*" Then

звездочки убери
он в E140 ищет E14. Конечно, находит.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
If Target.Address Like "*" & a(i) & "*" Then

звездочки убери
он в E140 ищет E14. Конечно, находит.

Автор - _Boroda_
Дата добавления - 15.08.2013 в 16:51
light26 Дата: Пятница, 16.08.2013, 09:30 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1351
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
звездочки убери

А, так вот о чем о чем Саня говорил
да, кстати, посмотри в окно Immediate:
$I$146 Like *$I$14*


Я не волшебник. Я только учусь
 
Ответить
Сообщение
звездочки убери

А, так вот о чем о чем Саня говорил
да, кстати, посмотри в окно Immediate:
$I$146 Like *$I$14*

Автор - light26
Дата добавления - 16.08.2013 в 09:30
  • Страница 1 из 1
  • 1
Поиск:

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