22.04.2017 05:53:58
Вариант: создать глобальную переменную-счётчик, приращение которой выполнять в каждой процедуре.
|
|
|
|
22.04.2017 06:54:50
|
|||
|
|
22.04.2017 07:16:16
Извините,а что значит хранить в укромном месте? Результат будет содержаться в объявленной переменной, её нужно куда то переместить? А насчёт вывода информации на панель, пока только одна идея: создать ещё один модуль,который будет выводит сообщение о состоянии переменной счетчика MsgBox MyCounter, и посадить этот модуль на кнопку Надстройки, но хотелось бы чтобы информация в режиме автомата обновлялась на панели Надстройки, хотя элемента способного вывести такую информацию в разметке XML я не встречал ещё. Может вы знаете?
|
|
|
|
22.04.2017 07:23:03
Может быть что-нибудь типа Label? |
|||
|
|
22.04.2017 07:38:13
Под Label - вы имеете ввиду компонент XML-разметки? Сейчас порылся в xml-редакторе, создал отдельную группу и добавил в неё элемент Label, по смыслу показалось что более всего в данном случае подходит команда onChange(изменение значения компонента), но данная функция не определена для элемента Label:(
|
|
|
|
22.04.2017 07:41:59
А значение переменной (или ячейки) разве нельзя присвоить Labei? Label1 = MyCounter
|
|
|
|
22.04.2017 07:49:06
Нет, насколько я понимаю у данного элемента только информационные функции присутствуют, id-имя для программы и label-имя которое мы видим на панели Надстройки.
|
|
|
|
22.04.2017 07:52:47
Как то так получается!
Изменено: |
|
|
|
22.04.2017 07:54:41
Мне не приходилось работать с XML, но для чего тогда Label, если на ней ничего нельзя отобразить? Может у Label есть свойство Caption? Я неверно написал в предыдущем сообщение: следует читать Label1.Caption = MyCounter
|
|
|
|
22.04.2017 08:28:17
Если вместо "Счётчик" подставить переменную - не работает?
|
|
|
|
22.04.2017 10:07:02
Лучше использовать отдельный текстовый файл, в который записывать накопленные значения - тогда история использований будет храниться и после закрытия надстройки.
Т.е. процесс такой: при запуске у Вас есть глобальная переменная(как написал Юрий). И есть текстовый файл. Есть Label. При запуске файла считываете последние показания из текстового файла(при закрытии - обновляете последним значением MyCounter). Далее в XML-схеме надо прописать для Label вместо того, что у Вас, нечто вроде:
И после этого в файл с кодом и этой схемой прописать такой код:
Пример подобного - во вложении. Только без считывания и записи данных в текстовый файл. Сами уж как-нибудь
Изменено:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|||||||||
|
|
22.04.2017 22:03:01
The_Prist я просто в шоке, спасибо большое, если честно думал это не реализуемо! Теперь по факту, XML разметку по вашему примеру повторил, запись и чтение с текстового файла сделал как показано ниже. Есть несколько нюансов! Первый: когда открываю excel заново и подгружается Надстройка панелька не отображает значение счётчика, только после первого использования макроса на ней появляется значение. Второй нюанс: у меня по всему коду стоят проверки типа If..... Is Nothing Then.....End, и если макрос завершается сбросом такой проверки в End, то счетчик на панели сбрасывается в Пусто(что выглядит так же как и при вновь открытом файле), но в текстовый файл значение всё же приплюсовывает, и пока не перезапустить программу использовав хотя бы один макрос, счётчик отображать значение не будет.
Изменено: |
|||
|
|
24.04.2017 09:48:29
1. Смотря где записан код считывания. Надо прописывать в Init_RibVar_Custom.
2. Скорее всего просто обнуляется ссылка на переменную Ribbon панели. Во вложении файл с процедурой CheckRibbon, которая восстанавливает ссылку. Для этого используется функция API CopyMemory. Должно работать на всех системах, но т.к. под рукой нет 32-битной - то проверить работоспособность в ней не могу. P.S. И ссылку для текстового файла на свой диск замените.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|
|
|
24.04.2017 22:34:27
Уважаемый The_Prist проверил ваш код, почему то один раз всё прошло успешно, а со второго ошибка на этой строчке кода:
Тут в ячейку А1 записывается значение переменной, а где эта переменная определена, я больше по коду не нашёл. Ещё я не пойму как ваше решение адаптировать под мои макросы?! В вашем коде жестко прописаны название Листа (SETS) и диапазон(A1), т.е. всегда в книге должен будет присутствовать некий Лист на котором в определённой ячейке будет хранится значение? |
|||
|
|
25.04.2017 08:35:31
Sub Init_RibVar_Custom(ribbon As IRibbonUI) Set objRibCustom = ribbon ThisWorkbook.Sheets("SETS").Range("A1") = ObjPtr(ribbon)
Судя по тому, что Вы даже не нашли переменную ribbon там, где она явно прослеживается - может Вам не заморачиваться настолько сильно?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|||||||||
|
|
26.04.2017 14:20:13
Уважаемый The_Prist извините, что такие долгие паузы в нашем диалоге! Я и не знал что так можно объявлять переменную(искал именно ObjPtr(ribbon) ), да я много чего не знаю, но вроде это не повод не задать вопрос, который мне действительно интересен и не принесёт мне ровным счётом никакой фин.выгоды в отличии от некоторых участников форума. Код который вы написали для меня высшие материи, честно ничего не понятно, хотя я вроде не полный нуль, не самый плинтус:).
Я просто не осознал что нужно выложить пример, у меня всё разбито на модули(куча кода), думал можно это показать на примере допустим вывода MsgBox
Да именно, я скопировал ваш файл, заменил в нём путь к текстовому файлу с G: на D: и попробовал запустить, первый раз всё прошло успешно, потом та ошибка которую я указал, сейчас я пробую запустить этот же файл и пишет уже другую ошибку(чувствую себя блондинкой). |
|||||||
|
|
||||||