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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2015, 12:36   #1
Zhnec
Новичок
Джуниор
 
Регистрация: 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


Оба варианта не работают как следует.
Zhnec вне форума Ответить с цитированием
Старый 03.11.2015, 14:02   #2
Zhnec
Новичок
Джуниор
 
Регистрация: 03.11.2015
Сообщений: 6
По умолчанию народ, чтобы было проще и нагляднее сделал схожий пример упрощенный, его вставляю в архиве.

Здесь все работает. А в предыдущем примере, если вывести значение переменной i, то оно совершенно не соответствует действительности. Может проблема в том, что числа имеют значения со множеством знаков после запятой?
Вложения
Тип файла: zip Test.zip (16.3 Кб, 9 просмотров)

Последний раз редактировалось Zhnec; 03.11.2015 в 14:12.
Zhnec вне форума Ответить с цитированием
Старый 03.11.2015, 14:29   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а) все работает
б) к чему этот цирк с 2 метками?
в) оставьте одну метку
Код:
i = ActiveCell.Value  '(1)
UserForm1.Label1.Caption = IIf(i = 0, "", "не ") & "равно 0"  '(2)
UserForm1.Show     '(3)
(все что было между строками (1) и (3) - замените на (2)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.11.2015, 14:29   #4
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

5 минут пытался понять Ваш пример - что у Вас там работает???
27102014 вне форума Ответить с цитированием
Старый 03.11.2015, 14:39   #5
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Код:
Public Sub Test()
Dim i As Integer

Sheets("Layer3").Select
Range("A2").Formula = "=Layer1!B2"
Range("A3").Formula = "=Layer2!B3"
Range("A2:A3").AutoFill Destination:=Range("A2:G3"), Type:=xlFillDefault
Range("H2").Formula = "=sum(A2:G2)"
Range("H3").Formula = "=sum(A3:G3)"
Range("H4").Formula = "=H2-H3"

i = ActiveCell.Value  '(1)
UserForm1.Label2.Caption = IIf(i = 0, "", "не ") & "равно 0"  '(2)
UserForm1.Show     '(3)

End Sub
27102014 вне форума Ответить с цитированием
Старый 03.11.2015, 15:11   #6
Zhnec
Новичок
Джуниор
 
Регистрация: 03.11.2015
Сообщений: 6
По умолчанию P.S.

Спасибо за ответы, с меткой - учту, так действительно проще и лаконичнее. суть проблемы выяснил - переменная i принимает значение совершенно отличное от того, что высчитывается в логе. например в таблице лога, после расчетов, у меня в ячейке B5 стоит значение -27. А если ввести команду MsgBox (i) сразу после i=ActiveCell.Value, то программа выдает значение i = 0. При других отклонениях, иногда выдает значение -15786,7877 и т.д. При том, что формат ячеек задан числовой. Поэтому проблема именно в присваивании значения переменной. Может быть кто-то сталкивался с такой проблемой?
Zhnec вне форума Ответить с цитированием
Старый 03.11.2015, 15:20   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Выделите/активируйте ячейку с -27 - получите в сообщении -27, какие проблемы?
Что спрашиваете - то и получаете...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.11.2015, 15:21   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

27102014, решил убрать все Select с вашего макроса - это правильно, только в этом случае
Код:
i = ActiveCell.Value
в i может попасть что угодно, потому активной в данным момент может быть любая ячейка
достаточно записать:
Код:
i = Range("H4")
чтобы уйти от неопределенности с ActiveCell
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.11.2015, 15:22   #9
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

i у Вас присвоено значение активной ячейки, Вы уверены что на ту ячейку ссылаетесь в коде макроса?
замените
Код:
i = ActiveCell.Value
на
Код:
 i = Range("A2" - здесь поставить нужную ячейку)
27102014 вне форума Ответить с цитированием
Старый 03.11.2015, 15:39   #10
Zhnec
Новичок
Джуниор
 
Регистрация: 03.11.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от 27102014 Посмотреть сообщение
i у Вас присвоено значение активной ячейки, Вы уверены что на ту ячейку ссылаетесь в коде макроса?
замените
Код:
i = ActiveCell.Value
на
Код:
 i = Range("A2" - здесь поставить нужную ячейку)
В том-то и дело, что я пробовал менять значение i на Range("B5"). итог такой же.

Т.е. если, например, я знаение этой ячейки B5 присвою другой, например A1:

Range("A1")=Range("B5"), то значение A1 будет -27. Но если ещё дальше дописать MsgBox(Range("A1")) , то выдаст значение 0. Я этого в принципе не понимаю.
Zhnec вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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