Глобальная переменная

Автор Alex16, 22 ноября 2016, 15:32

0 Пользователи и 1 гость просматривают эту тему.

mikekaganski

Цитата: Alex16 от 23 ноября 2016, 11:28Тогда получается мой вопрос переменной не решить?

Вам ведь rami дал решение: в Вашем исходном примере поменять Public на Global - и всё. Да, инкапсуляции не будет, так это и не C++
С уважением,
Михаил Каганский

Alex16

Цитата: JohnSUN от 23 ноября 2016, 11:52А можно просто каждый раз заглядывать в тот же самый ListBox и читать его значение.
В общем то можно. Найти какое-то не используемое его свойство и в него писать последний ИтемИндекс.... Ну типа свойства Tag у TComponent(по моему) в Делфи.
Цитата: JohnSUN от 23 ноября 2016, 11:52Любое из этих решений может быть реализовано и, скорее всего, будет работать годами.
:) Нет ничего постоянней временного)

Цитата: mikekaganski от 23 ноября 2016, 14:09
Цитата: Alex16 от 23 ноября 2016, 11:28Тогда получается мой вопрос переменной не решить?

Вам ведь rami дал решение: в Вашем исходном примере поменять Public на Global - и всё.
Виноват, не верно принял его ответ. Спасибо за то, что ткнули меня носом :) И за ссылку спасибо.

rami

Цитата: Alex16 от 23 ноября 2016, 13:09Найти какое-то не используемое его свойство и в него писать последний ИтемИндекс.... Ну типа свойства Tag у TComponent(по моему) в Делфи.
Так этот самый Tag есть у всех элементов управления.

Alex16

#18
И всеж, как лучше/правильнее сделать:
так
      Option Explicit
      Global shtSystem as Object, shtReport as Object.....


Sub MainInit
shtSystem = ThisComponent.Sheets(0)
shtReport = ThisComponent.Sheets(1)
shtData   = ThisComponent.Sheets(2)
...........
End Sub

Sub Namesub
dim oCell
      oCell = shtSystem.getcellbyposition()
....
end sub

или так:
      Option Explicit
      Public shtSystem as Object, shtReport as Object.....


Sub NameSub1
dim oCell
shtSystem = ThisComponent.Sheets(0)
      oCell = shtSystem.getcellbyposition()
...........
End Sub

Sub NameSub2
dim oRange
shtSystem = ThisComponent.Sheets(0)
      oRange = shtSystem.getRangebyname()
...........
End Sub

Alex16

#19
Цитата: mikekaganski от 23 ноября 2016, 13:29По-моему, Вы несколько небрежно составили пример.
Исправил.
Цитата: rami от 23 ноября 2016, 13:16Так этот самый Tag есть у всех элементов управления.
Хм... в свойствах Tag - нету. Есть Дополнительная информация - оно?

mikekaganski

Не стоит делать глобальные ссылки на объекты
Вы непринуждённо переключились с чисел на объекты
А объекты, ссылки на которые Вы собрались хранить, управляются программой и могут измениться. Лист может удалиться, к примеру.
С уважением,
Михаил Каганский

rami

Цитата: Alex16 от 23 ноября 2016, 13:22И всеж, как лучше/правильнее сделать:
Лучше так, как будет работать, но я никогда не назначаю переменные листа вне макроса. Только переменные документа oDoc и подобные (если нужно работать с несколькими документами одновременно) или или переменную диалога oDlg (но не всегда, а когда нужно). Составные части документа (листы, диапазоны и т.д.) или диалога (элементы) легко получить из соответствующих переменных.

Alex16

Цитата: mikekaganski от 23 ноября 2016, 13:38Вы непринуждённо переключились с чисел на объекты
Дело в том, что первый вариант был, только вместо глобал был паблик. И среди объявленных переменных объектов, объявил числовую. У которой и заметил что в ней не сохраняется значение, но в тоже время с объектными переменными проблем не возникло, а у меня возник вопрос.
Цитата: mikekaganski от 23 ноября 2016, 13:38А объекты, ссылки на которые Вы собрались хранить, управляются программой и могут измениться. Лист может удалиться, к примеру.
Ну в моем случае этого не должно произойти по определению книги, которую делаю. В ней будут три фиксированных листа, два из них будут скрыты, доступ к которым будет из макросов.
А на одном листе, практически все ячейки ридонли, только в некоторые вносятся данные.
Но мысль понял правильно. Спасибо за помощь и разъяснения.

Alex16

Цитата: rami от 23 ноября 2016, 15:44
Цитата: Alex16 от 23 ноября 2016, 13:22И всеж, как лучше/правильнее сделать:
Составные части документа (листы, диапазоны и т.д.) или диалога (элементы) легко получить из соответствующих переменных.
Ну в общем-то понятно. Спасибо

rami

Цитата: Alex16 от 23 ноября 2016, 13:35Хм... в свойствах Tag - нету. Есть Дополнительная информация - оно?
Оно, это перевод в интерфейсе, а в макросе есть свойство объекта элемента управления .tag

JohnSUN

Все-таки не понимаю... Насколько я понял предполагаемый сценарий работы, в комбобоксе выбирается какое-то значение, которое считывается в переменную и будет многократно использоваться в макросах... Зачем писать в .tag это значение (текст, потом обратно в число преобразовывать), если в любой момент можно опять получить само значение?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

mikekaganski

Цитата: JohnSUN от 23 ноября 2016, 14:07Зачем писать в .tag это значение (текст, потом обратно в число преобразовывать), если в любой момент можно опять получить само значение?

+
С уважением,
Михаил Каганский

rami

Цитата: JohnSUN от 23 ноября 2016, 16:07
Все-таки не понимаю... Насколько я понял предполагаемый сценарий работы, в комбобоксе выбирается какое-то значение, которое считывается в переменную и будет многократно использоваться в макросах... Зачем писать в .tag это значение (текст, потом обратно в число преобразовывать), если в любой момент можно опять получить само значение?
Ты такой непонятливый, ну, точно как я ;D ;D ;D , я думал, что речь идёт о диалоге, но если элемент "список" на самом листе, то можно назначить связанную ячейку и вообще забыть о макросах: выбранная запись или её позиция будут отображаться в связанной ячейке — эту ячейку обрабатывать формулами. Или я в очередной раз не понял ???

Alex16

Цитата: JohnSUN от 23 ноября 2016, 14:07Все-таки не понимаю... Насколько я понял предполагаемый сценарий работы, в комбобоксе выбирается какое-то значение, которое считывается в переменную и будет многократно использоваться в макросах..
Не верно. Эту переменную проверяю в момент выбора в списке. После выбора в списке, мне нужен индекс предыдущего выбора. Нужно это, что бы не выполнять повторно некоторые действия, для определенных пунктов. Т.е. один раз выполняем и далее если выбор в списке в этих определенных пунктах, то не выполняем код пока не будет выбран "другой пункт" у которого тоже нужно выполнить похожий код один раз. Ну как-то так)

Alex16

А то о чем вы говорите - я бы сообразил, не совсем пустоголовый)
Но моя вина в том, что не смог понятно объяснить