Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Vhodnoylogin
-13 / 2 / 0
Регистрация: 02.04.2012
Сообщений: 301
1

Бойтесь АктивХ Кнопок!

12.08.2016, 12:02. Просмотров 733. Ответов 21
Метки нет (Все метки)

Люди, здравствуйте.

Это не конкретный вопрос для решения, а вопрос для того, чтобы поделиться наблюдениями.

Итак:
АктивХ кнопки просто неадекватно себя ведут. Они могут просто поменяться местами - в смысле обработчиками - просто от операции закрыть-открыть книгу Экселя. А программное создание несет в себе столько геморроя, что лучше с этим не связываться.

У кого такое было, что кнопки жили своей жизнью?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2016, 12:02
Ответы с готовыми решениями:

Определение положения кнопок АктивХ на листе автоматически
Добрый день, есть лист со множеством кнопок АктивХ, на которые повешены разные...

Проигрывание mp3 без использования сторонних программ и АктивХ MediaPlayer
Добрый день, гуру экселя. Помогите решить проблему. На листе - в ячейке B6 -...

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

Поля и элементы АктивХ в Ворде
Здравствуйте. 4й день ломаю голову, обыскал весь инет. Требуется создать поле...

Выпадающий список АктивХ (чтение списка по горизонтали)
Здравствуйте, друзья. Подскажите решение вопроса. Есть список АктивХ -...

21
kalbasiatka
396 / 248 / 77
Регистрация: 27.10.2012
Сообщений: 832
12.08.2016, 12:16 2
Пользуюсь только автофигурами, поэтому делиться особо нечем .
0
Vhodnoylogin
-13 / 2 / 0
Регистрация: 02.04.2012
Сообщений: 301
12.08.2016, 12:39  [ТС] 3
Модератор, пожалуйста, переименуй тему в "Ужасы ВБА".
0
KoGG
5274 / 1347 / 320
Регистрация: 23.12.2010
Сообщений: 2,019
Записей в блоге: 1
12.08.2016, 16:24 4
Неадекватные ужасы.
Наверное ошибка в генах.
0
toiai
3094 / 887 / 193
Регистрация: 29.05.2010
Сообщений: 1,906
12.08.2016, 21:02 5
Цитата Сообщение от Vhodnoylogin Посмотреть сообщение
Итак:
АктивХ кнопки просто неадекватно себя ведут.
Есть пословица - не умеешь.... не мучай попу....
1
Vhodnoylogin
-13 / 2 / 0
Регистрация: 02.04.2012
Сообщений: 301
13.08.2016, 23:03  [ТС] 6
toiai, а есть просто умная мысль: "нечем помочь - промолчи".
0
Shersh
Заблокирован
14.08.2016, 00:08 7
Vhodnoylogin, а есть где-то истина?
Давайте свой файл с ужасами - мы найдём попу и вазелин до кучи.
1
Catstail
Модератор
23603 / 11704 / 2046
Регистрация: 12.02.2012
Сообщений: 19,091
14.08.2016, 08:37 8
Vhodnoylogin, приучись, прежде, чем обвинять среду или компонент, 100 раз проверять собственный код. Иначе велик риск попасть в глупое положение.
2
Vhodnoylogin
-13 / 2 / 0
Регистрация: 02.04.2012
Сообщений: 301
14.08.2016, 11:35  [ТС] 9
Catstail, зачем мне проверять код из трех строчек? Я делаю просто: удаляю кнопки - создаю кнопки.
Если ВБА - дно, то это надолго.
0
Catstail
Модератор
23603 / 11704 / 2046
Регистрация: 12.02.2012
Сообщений: 19,091
14.08.2016, 11:52 10
Vhodnoylogin, в мире миллионы пользователей VBA. А проблемы с кодом из трех строк - у тебя одного. Приведи свой код - посмотрим, в чем дело.
0
Vhodnoylogin
-13 / 2 / 0
Регистрация: 02.04.2012
Сообщений: 301
14.08.2016, 12:22  [ТС] 11
Цитата Сообщение от Catstail Посмотреть сообщение
в мире миллионы пользователей VBA
ну это уже из разряда "миллионы мух не могут ошибаться".

Цитата Сообщение от Catstail Посмотреть сообщение
Приведи свой код
Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Sub TotalClear()
    Dim wsh As Worksheet
    Set wsh = Workbooks(TOOLBOOKNAME).Worksheets(TOOLSHEETNAME)
    
    wsh.Cells.clear
    'wsh.Cells.Delete
    For Each it In wsh.OLEObjects
        it.Delete
    Next it
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function MakeButton(name As String, rng As Range)
    Dim wsh As Worksheet
    Set wsh = rng.Worksheet
 
    Set btn = wsh.OLEObjects.add( _
        ClassType:="Forms.CommandButton.1", _
        Link:=False, _
        DisplayAsIcon:=False, _
        Left:=rng.Left, _
        Top:=rng.Top, _
        Width:=rng.Width, _
        Height:=rng.Height)
    btn.Object.Caption = name
    Set MakeButton = btn
End Function
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Sub DoIt()
    TotalClear.TotalClear
 
    SetGreedBackGround Range(Cells(1, 1), Cells(4, 4))
    MakeButton BTTN_RESETTOOL, Range(Cells(2, 2), Cells(3, 3))
    
    SetGreedBackGround Range(Cells(6, 1), Cells(9, 4))
    Set btn = MakeButton(BTTN_GEETDSNS, Range(Cells(7, 2), Cells(8, 3)))
    
    SetGreedBackGround Range(Cells(6, 1), Cells(9, 4))
    Set btn = MakeButton(BTTN_SETCNCTN, Range(Cells(7, 2), Cells(8, 3)))
    btn.Visible = False
    
    SetGreedBackGround Range(Cells(6, 1), Cells(9, 4))
    Set btn = MakeButton(BTTN_ANALYSE, Range(Cells(7, 2), Cells(8, 3)))
    btn.Visible = False
    
    SetGreedBackGround Range(Cells(6, 1), Cells(9, 4))
    Set btn = MakeButton(BTTN_CREATEPVT, Range(Cells(7, 2), Cells(8, 3)))
    btn.Visible = False
End Sub
Первый и второй вызывается третьим кодом.
0
SlavaRus
1091 / 205 / 29
Регистрация: 15.03.2010
Сообщений: 641
14.08.2016, 13:14 12
Удалил кнопки с листа, внедрил новые. Где то в модулях остался мусорный код обработчиков удаленных кнопок, на которые чудным образом завязались вновь внедрённые кнопки. Ты ждёшь, что у тебя будет все работать? Учи матчасть...
1
fever brain
oh my god
1121 / 595 / 115
Регистрация: 05.01.2016
Сообщений: 1,834
Записей в блоге: 7
14.08.2016, 13:16 13
<удалил пост - не успел ответить>
0
Catstail
Модератор
23603 / 11704 / 2046
Регистрация: 12.02.2012
Сообщений: 19,091
14.08.2016, 16:16 14
Цитата Сообщение от Vhodnoylogin Посмотреть сообщение
ну это уже из разряда "миллионы мух не могут ошибаться".
- не совсем. Скорее это означает, что ты пытаешься войти в квартиру через подвал или форточку (хотя рядом открытая дверь).

Проверил твой код. Кнопки создаются и удаляются... Что дальше?
0
The trick
Модератор
7365 / 2583 / 755
Регистрация: 22.02.2013
Сообщений: 3,799
Записей в блоге: 76
14.08.2016, 16:32 15
Вообще некоторые ActiveX компоненты содержат уязвимости что позволяют злоумышленнику выполнить эксплоит на конечной машине. К примеру CVE-2012-0158 и CVE-2015-1641. Мне как-то приходилось разбираться в их работе, вот это реально стоит бояться если не стоят соответствующие обновления и антивирусные программы.
0
Vhodnoylogin
-13 / 2 / 0
Регистрация: 02.04.2012
Сообщений: 301
14.08.2016, 19:07  [ТС] 16
Цитата Сообщение от Catstail Посмотреть сообщение
Проверил твой код. Кнопки создаются и удаляются... Что дальше?
А если при этом еще и их имена выводить? В виде "имя - капча". Тогда ты увидишь, что сама кнопка ресет меняется. То она Command_button1, то Command_button6.
0
Catstail
Модератор
23603 / 11704 / 2046
Регистрация: 12.02.2012
Сообщений: 19,091
15.08.2016, 08:58 17
Цитата Сообщение от Vhodnoylogin Посмотреть сообщение
То она Command_button1, то Command_button6.
- и что? Это страшно?
0
Burk
485 / 362 / 107
Регистрация: 11.07.2014
Сообщений: 1,181
15.08.2016, 11:12 18
Цитата Сообщение от Vhodnoylogin Посмотреть сообщение
А если при этом еще и их имена выводить? В виде "имя - капча". Тогда ты увидишь, что сама кнопка ресет меняется. То она Command_button1, то Command_button6.
Vhodnoylogin, я тоже работал с такими кнопками и ничего ужасного не случается, если всё делать как надо.
VBA запоминает последнее имя созданной кнопки. А чтобы этого не происходило рекомендую не пользоваться автоматически создаваемыми именами CommandButtonN, чтобы не было замены 1 на 6, а присваивать свои нэймы.
Напр. вместо ComandButton1 - ComBut1, тогда не будет никакой путаницы.
Есть один нюанс, лучше переименовывать их не в цикле создания кнопок, а после того, как ВСЕ кнопки созданы, а то были неприятности при создании OLEOb на листе, которые я отношу к глюкам Экселя. При таком подходе все ужасы проходят как сон.

Добавлено через 30 минут
Естественно, что всё, написанное мной, относится и к другим классам OLE
0
Vhodnoylogin
-13 / 2 / 0
Регистрация: 02.04.2012
Сообщений: 301
15.08.2016, 13:29  [ТС] 19
Цитата Сообщение от Catstail Посмотреть сообщение
- и что? Это страшно?
Нет не страшно. Просто кнопка, отвечающая за одно (судя по названию и положению на экране), начитает делать другое.
0
SlavaRus
1091 / 205 / 29
Регистрация: 15.03.2010
Сообщений: 641
15.08.2016, 14:31 20
Ты ответственный за то, что делает кнопка. Создал кнопку, будь последователен, создай код обработчик клика на неё. Если у тебя код уже находится в каком либо модуле, то переименуй кнопку соответственно как тебе писали раньше. Если не секрет, для чего нужны динамические созданные кнопки?
0
15.08.2016, 14:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2016, 14:31

Как динамически создать не-Акссесовский АктивХ в форме?
Как динамически создать не-Акссесовский АктивХ на форме? Стандартные...

Создать массив кнопок, для каждой кнопок будет одинаковый обработчик
Всем привет! Нужна помощь в реализации такой задачи. Нужно создать массив...

Из созданного массива кнопок одна из кнопок (9) должна выполнять метод Percent
Из созданного массива кнопок одна из кнопок (9) должна выполнять метод Percent,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru