|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.11.2015, 12:36 | #1 |
Новичок
Джуниор
Регистрация: 03.11.2015
Сообщений: 6
|
Оператор вызова формы не видит число
Товарищи, помогите, пожалуйста, разобраться с такой проблемой.
Сразу скажу - файл целиком отправить не могу, если будут уточняющие вопросы - любой кусок кода и т.д. предоставлю. суть программы: на отдельно создаваемый лист, который является логом записываются значения из других. Конкретно здесь - верхняя строка - значения прибыли по месяцам с одного листа, нижняя - значения прибыли с другого листа. Задумка: просуммировать строки, и выполнив вычитание одной суммы из другой, определить, имеется ли отклонение. Если оно выполняется - показывается один элемент формы, если нет - второй. Арифметические операции выполняются исправно. Что касается формы - в ней 2 элемента label (один - если условие выполнится, другой - если нет) накладываются друг на друга. а теперь что, собственно не так: если отклонений нет - все верно выполняется. Также, если отклонение имеется в диапазоне янв-любой месяц непрерывно (т.е. в каждом месяце есть отклонение) - все верно работает. НО если в январе, например, отклонения нет, а в феврале есть - на листе лога все происходит верно, отклонение видно, а элемент формы выбирается тот, который указывает, что все в порядке, отклонений нет. UserForm1.Label2.Visible = True с чем это может быть связано? прошу прощения за бногобукв, но не знаю, как лучше объяснить суть проблемы. Range("A2") = "выручка из БДР и Бпродаж" Range("C3").Select ActiveCell.Formula = "=БДР!AJ13" Selection.AutoFill Destination:=Range("C3:N3"), Type:=xlFillDefault Range("C4").Select ActiveCell.Formula = "=Бпродаж!AJ19" Selection.AutoFill Destination:=Range("C4:N4"), Type:=xlFillDefault Range("B3").Select ActiveCell.Formula = "=SUM(C3:N3)" Range("B4").Select ActiveCell.Formula = "=SUM(C4:N4)" Range("B5").Select ActiveCell.Formula = "=B3-B4" i = ActiveCell.Value Selection.Copy Range("C5:N5").Select Selection.PasteSpecial Paste:=xlPasteFormulas Дальше пробовал двумя вариантами: 1) If i = 0 Then UserForm1.Label2.Visible = True Range("A2:N2").Interior.ColorIndex = 42 Else UserForm1.Label3.Visible = True Range("A2").Font.ColorIndex = 3 Range("A2:N2").Interior.ColorIndex = 1 End If 2) Range("C5:N5").Select For Each r In Selection If r <> 0 Then i = i + r UserForm1.Label2.Visible = True Range("A2:N2").Interior.ColorIndex = 42 Else UserForm1.Label3.Visible = True Range("A2").Font.ColorIndex = 3 Range("A2:N2").Interior.ColorIndex = 1 End If Next r Оба варианта не работают как следует. |
03.11.2015, 14:02 | #2 |
Новичок
Джуниор
Регистрация: 03.11.2015
Сообщений: 6
|
народ, чтобы было проще и нагляднее сделал схожий пример упрощенный, его вставляю в архиве.
Здесь все работает. А в предыдущем примере, если вывести значение переменной i, то оно совершенно не соответствует действительности. Может проблема в том, что числа имеют значения со множеством знаков после запятой?
Последний раз редактировалось Zhnec; 03.11.2015 в 14:12. |
03.11.2015, 14:29 | #3 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
а) все работает
б) к чему этот цирк с 2 метками? в) оставьте одну метку Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
03.11.2015, 14:29 | #4 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 248
|
5 минут пытался понять Ваш пример - что у Вас там работает???
|
03.11.2015, 14:39 | #5 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 248
|
Код:
|
03.11.2015, 15:11 | #6 |
Новичок
Джуниор
Регистрация: 03.11.2015
Сообщений: 6
|
P.S.
Спасибо за ответы, с меткой - учту, так действительно проще и лаконичнее. суть проблемы выяснил - переменная i принимает значение совершенно отличное от того, что высчитывается в логе. например в таблице лога, после расчетов, у меня в ячейке B5 стоит значение -27. А если ввести команду MsgBox (i) сразу после i=ActiveCell.Value, то программа выдает значение i = 0. При других отклонениях, иногда выдает значение -15786,7877 и т.д. При том, что формат ячеек задан числовой. Поэтому проблема именно в присваивании значения переменной. Может быть кто-то сталкивался с такой проблемой?
|
03.11.2015, 15:20 | #7 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Выделите/активируйте ячейку с -27 - получите в сообщении -27, какие проблемы?
Что спрашиваете - то и получаете...
webmoney: E265281470651 Z422237915069 R418926282008
|
03.11.2015, 15:21 | #8 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
27102014, решил убрать все Select с вашего макроса - это правильно, только в этом случае
Код:
достаточно записать: Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
03.11.2015, 15:22 | #9 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 248
|
i у Вас присвоено значение активной ячейки, Вы уверены что на ту ячейку ссылаетесь в коде макроса?
замените Код:
Код:
|
03.11.2015, 15:39 | #10 | |
Новичок
Джуниор
Регистрация: 03.11.2015
Сообщений: 6
|
Цитата:
Т.е. если, например, я знаение этой ячейки B5 присвою другой, например A1: Range("A1")=Range("B5"), то значение A1 будет -27. Но если ещё дальше дописать MsgBox(Range("A1")) , то выдаст значение 0. Я этого в принципе не понимаю. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Kohana 3 ORM: почему контроллер не видит checkbox с формы? | Blondy | PHP | 5 | 15.05.2014 22:32 |
Ввести число. По выбору пользователя добавить к нему 1, найти корень или обратное число. создать програму испозуючи оператор "cas | FYNZIK | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 28.02.2014 00:50 |
Задача на использования оператор цикла for C++. Дано вещественное число A и целое число N (> 0). Используя один цикл, найти сумму | /Crow/ | Помощь студентам | 0 | 19.12.2013 12:02 |
Спарсить то что видит снифер, но не видит браузер... | FleXik | Общие вопросы Delphi | 8 | 11.12.2012 00:44 |
блокировка вызова 2-го экземпляра формы из dll | Roof | Общие вопросы Delphi | 6 | 27.08.2008 01:03 |