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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос показывает ложь а формула иснину - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос показывает ложь а формула иснину (Макросы/Sub)
Макрос показывает ложь а формула иснину
lFJl Дата: Пятница, 18.03.2016, 08:11 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 188
Репутация: 3 ±
Замечаний: 0% ±

Excel 2007
Добрый день!
Выполняю математическое действие с % и обычным числом и сравниваю с результатом, в макросе пишет ложь, а проверяю формулой - там истина. Подскажите, где я ошибся?

(Прошу прощения, почему-то фал не приложился с 1 раза)
К сообщению приложен файл: 7026630.xlsm(21Kb)


Сообщение отредактировал lFJl - Пятница, 18.03.2016, 08:57
 
Ответить
СообщениеДобрый день!
Выполняю математическое действие с % и обычным числом и сравниваю с результатом, в макросе пишет ложь, а проверяю формулой - там истина. Подскажите, где я ошибся?

(Прошу прощения, почему-то фал не приложился с 1 раза)

Автор - lFJl
Дата добавления - 18.03.2016 в 08:11
китин Дата: Пятница, 18.03.2016, 08:16 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3454
Репутация: 549 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
Подскажите, где я ошибся?
в формуле!!!!! и точка!!!! deal


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
Сообщение
Подскажите, где я ошибся?
в формуле!!!!! и точка!!!! deal

Автор - китин
Дата добавления - 18.03.2016 в 08:16
lFJl Дата: Пятница, 18.03.2016, 08:43 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 188
Репутация: 3 ±
Замечаний: 0% ±

Excel 2007
китин, Ну хорошо, можете "носом ткнуть"? :)
А то что-то мне не понятно, почему msgbox показывает мне "33 / 33 / False" ?
 
Ответить
Сообщениекитин, Ну хорошо, можете "носом ткнуть"? :)
А то что-то мне не понятно, почему msgbox показывает мне "33 / 33 / False" ?

Автор - lFJl
Дата добавления - 18.03.2016 в 08:43
китин Дата: Пятница, 18.03.2016, 08:48 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3454
Репутация: 549 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
можете "носом ткнуть"?
куда или во что? я что колдун что ли не видя ни формулы ни макроса сказать вам где ошибка.форум экстрасенсов через дорогу


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
Сообщение
можете "носом ткнуть"?
куда или во что? я что колдун что ли не видя ни формулы ни макроса сказать вам где ошибка.форум экстрасенсов через дорогу

Автор - китин
Дата добавления - 18.03.2016 в 08:48
lFJl Дата: Пятница, 18.03.2016, 08:58 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 188
Репутация: 3 ±
Замечаний: 0% ±

Excel 2007
китин, Прошу прощения, сразу не заметил, что файл не прикрепился! Исправил.
 
Ответить
Сообщениекитин, Прошу прощения, сразу не заметил, что файл не прикрепился! Исправил.

Автор - lFJl
Дата добавления - 18.03.2016 в 08:58
_Boroda_ Дата: Пятница, 18.03.2016, 09:39 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 9375
Репутация: 3948 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Запутано у Вас как-то все. Не стал сильно разбираться, одно ясно - у Вас есть переменная vern1, а в 45-й строке она почему-то превращается в vern1_ (с нижним подчеркиванием). Аналогично и с vern2.
Чтобы избежать подобных неприятностей, можно использовать перед кодом (в первой строке модуля) волшебные слова Option Explicit. Они будут ставиться автоматически (в новый модуль), если Вы поставите галку в Туулс - Опшнс - Рекуире Вариабл Декларейшн



А вообще-то, оператор SendKeys "{DOWN}" вполне можно обрабатывать циклом. Только вот не совсем ясно, что же Вы хотите.
К сообщению приложен файл: 5056566.png(50Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЗапутано у Вас как-то все. Не стал сильно разбираться, одно ясно - у Вас есть переменная vern1, а в 45-й строке она почему-то превращается в vern1_ (с нижним подчеркиванием). Аналогично и с vern2.
Чтобы избежать подобных неприятностей, можно использовать перед кодом (в первой строке модуля) волшебные слова Option Explicit. Они будут ставиться автоматически (в новый модуль), если Вы поставите галку в Туулс - Опшнс - Рекуире Вариабл Декларейшн



А вообще-то, оператор SendKeys "{DOWN}" вполне можно обрабатывать циклом. Только вот не совсем ясно, что же Вы хотите.

Автор - _Boroda_
Дата добавления - 18.03.2016 в 09:39
lFJl Дата: Пятница, 18.03.2016, 10:13 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 188
Репутация: 3 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, На счет нижнего подчеркивания - я просто пробовал несколько вариантов формул, перед отправкой на форум, и видимо не все обратно вернул.
Оператор SendKeys использую, потому что у меня большая таблица, она фильтруется, по определенному значению, и мне нужно пробежаться по полученным значениям, как это сделать по другому, я увы не знаю, но если подскажите, я бы рад был отказаться от этого оператора, ибо периодически num lock отключает, что при работе в excel'е не совсем удобно :)
На счет Option Explicit, спасибо, впредь буду использовать, не приходилось сталкиваться, попробовал, оказалось удобно:)
Переменные объявил(понимаю, что их нужно возможно объявлять как- то по другому, но пока мои знания на этом заканчиваются:)) Файл прикрепил, в чем же все таки проблема?
К сообщению приложен файл: 8240964.xlsm(20Kb)
 
Ответить
Сообщение_Boroda_, На счет нижнего подчеркивания - я просто пробовал несколько вариантов формул, перед отправкой на форум, и видимо не все обратно вернул.
Оператор SendKeys использую, потому что у меня большая таблица, она фильтруется, по определенному значению, и мне нужно пробежаться по полученным значениям, как это сделать по другому, я увы не знаю, но если подскажите, я бы рад был отказаться от этого оператора, ибо периодически num lock отключает, что при работе в excel'е не совсем удобно :)
На счет Option Explicit, спасибо, впредь буду использовать, не приходилось сталкиваться, попробовал, оказалось удобно:)
Переменные объявил(понимаю, что их нужно возможно объявлять как- то по другому, но пока мои знания на этом заканчиваются:)) Файл прикрепил, в чем же все таки проблема?

Автор - lFJl
Дата добавления - 18.03.2016 в 10:13
Матраскин Дата: Пятница, 18.03.2016, 12:31 | Сообщение № 8
Группа: Друзья
Ранг: Обитатель
Сообщений: 341
Репутация: 63 ±
Замечаний: 0% ±

20xx
Привет,

ST1 и ST2 не меняются, не уверен что так должно быть))

p.s. я бы предложил что то типо ST1+v_
А v_ начинать не с 1, а с 0

Спасибо


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Пятница, 18.03.2016, 12:39
 
Ответить
СообщениеПривет,

ST1 и ST2 не меняются, не уверен что так должно быть))

p.s. я бы предложил что то типо ST1+v_
А v_ начинать не с 1, а с 0

Спасибо

Автор - Матраскин
Дата добавления - 18.03.2016 в 12:31
lFJl Дата: Пятница, 18.03.2016, 12:52 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 188
Репутация: 3 ±
Замечаний: 0% ±

Excel 2007
Матраскин,
Привет, Ну только что проверил, ST1 и ST2 меняются!
Вопрос в том, почему я сделал формулу в ячейке:
Код
=J3 * 100 - K3 + ((K4 - K3) * 10) = J4 * 100

И она истина
А вот код в макросе аналогичен формуле
[vba]
Код
(vern1 - sterv1 + ((sterv2 - sterv1) * 10) = vern2)
[/vba]
PS = vern1, vern2 уже заранее перемножены на 100
Так вот макрос говорит false.
И тут я не понимаю, в чем подвох?
При выполнении макроса сделал вывод результатов и один из результатов "33 / 33 / False", хотя 33=33 мне кажется!
 
Ответить
СообщениеМатраскин,
Привет, Ну только что проверил, ST1 и ST2 меняются!
Вопрос в том, почему я сделал формулу в ячейке:
Код
=J3 * 100 - K3 + ((K4 - K3) * 10) = J4 * 100

И она истина
А вот код в макросе аналогичен формуле
[vba]
Код
(vern1 - sterv1 + ((sterv2 - sterv1) * 10) = vern2)
[/vba]
PS = vern1, vern2 уже заранее перемножены на 100
Так вот макрос говорит false.
И тут я не понимаю, в чем подвох?
При выполнении макроса сделал вывод результатов и один из результатов "33 / 33 / False", хотя 33=33 мне кажется!

Автор - lFJl
Дата добавления - 18.03.2016 в 12:52
_Boroda_ Дата: Пятница, 18.03.2016, 12:52 | Сообщение № 10
Группа: Модераторы
Ранг: Экселист
Сообщений: 9375
Репутация: 3948 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
У Вас там округление шалит. Вот так попробуйте.
[vba]
Код
        MsgBox (vern1 - sterv1 + ((sterv2 - sterv1) * 10) & " / " & vern2 & " / " & (Round(vern1 - sterv1 + ((sterv2 - sterv1) * 10), 5) = Round(vern2, 5)))
[/vba]
===
Если Вы выше MsgBox напишете что-то типа
[vba]
Код
        qq = vern1 - sterv1 + ((sterv2 - sterv1) * 10)
        aa = vern2
        bb = qq - aa
[/vba]и посмотрите на значение переменной bb, то увидите, что она равна 7,105427357601E-15 - это очень близко к 0, но не ноль
Почитать можно здесь https://support.microsoft.com/ru-ru/kb/78113


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУ Вас там округление шалит. Вот так попробуйте.
[vba]
Код
        MsgBox (vern1 - sterv1 + ((sterv2 - sterv1) * 10) & " / " & vern2 & " / " & (Round(vern1 - sterv1 + ((sterv2 - sterv1) * 10), 5) = Round(vern2, 5)))
[/vba]
===
Если Вы выше MsgBox напишете что-то типа
[vba]
Код
        qq = vern1 - sterv1 + ((sterv2 - sterv1) * 10)
        aa = vern2
        bb = qq - aa
[/vba]и посмотрите на значение переменной bb, то увидите, что она равна 7,105427357601E-15 - это очень близко к 0, но не ноль
Почитать можно здесь https://support.microsoft.com/ru-ru/kb/78113

Автор - _Boroda_
Дата добавления - 18.03.2016 в 12:52
_Boroda_ Дата: Пятница, 18.03.2016, 12:57 | Сообщение № 11
Группа: Модераторы
Ранг: Экселист
Сообщений: 9375
Репутация: 3948 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Матраскин,
Цитата Матраскин, 18.03.2016 в 12:31, в сообщении № 8
ST1 и ST2 не меняются

Если проходить код через F8, то да, не меняются. Дело в том, что SendKeys, согласно справке, "Отправляет один или несколько кодов клавиш в активное окно ...". Когда Вы проходите макрос по F8, то активным у Вас является окно VBA, а когда Вы запускаете макрос из Excel - активен Excel.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМатраскин,
Цитата Матраскин, 18.03.2016 в 12:31, в сообщении № 8
ST1 и ST2 не меняются

Если проходить код через F8, то да, не меняются. Дело в том, что SendKeys, согласно справке, "Отправляет один или несколько кодов клавиш в активное окно ...". Когда Вы проходите макрос по F8, то активным у Вас является окно VBA, а когда Вы запускаете макрос из Excel - активен Excel.

Автор - _Boroda_
Дата добавления - 18.03.2016 в 12:57
Матраскин Дата: Пятница, 18.03.2016, 13:00 | Сообщение № 12
Группа: Друзья
Ранг: Обитатель
Сообщений: 341
Репутация: 63 ±
Замечаний: 0% ±

20xx
_Boroda_,

вот это поворот


в интернете опять кто-то не прав
 
Ответить
Сообщение_Boroda_,

вот это поворот

Автор - Матраскин
Дата добавления - 18.03.2016 в 13:00
lFJl Дата: Пятница, 18.03.2016, 13:06 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 188
Репутация: 3 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, Тоже про округление подумал, как раз доделал, а тут ответ! :)
Спасибо, как нужно работает! :)
PS почти решил задачку для своей темы :)
 
Ответить
Сообщение_Boroda_, Тоже про округление подумал, как раз доделал, а тут ответ! :)
Спасибо, как нужно работает! :)
PS почти решил задачку для своей темы :)

Автор - lFJl
Дата добавления - 18.03.2016 в 13:06
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос показывает ложь а формула иснину (Макросы/Sub)
Страница 1 из 11
Поиск:

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