Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
VeX
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
#1

В чем разница объявления глобальных переменных в module или в ThisDocument? - VBA

14.07.2015, 23:35. Просмотров 1220. Ответов 14
Метки нет (Все метки)

Скажите в чем разница объявления глобальных переменных в module1 или в ThisDocument? и можно ли вообще там объявлять переменные?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2015, 23:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В чем разница объявления глобальных переменных в module или в ThisDocument? (VBA):

Не понятное обнуление глобальных переменных - VBA
Всем привет. Я тут новенький, так что если что не так, прошу прощение. :-) Суть вопроса в следующем. Поясните пожалуйста почему...

Создание глобальных переменных в Excel - VBA
Проблема: есть макрос,один лист и собственно книга - нужно где-то хранить числовые значения, используемые во всех трех модулях,всё время...

Access 97 иногда сбрасывает значения глобальных переменных - VBA
Заметил (и не только я), что Access 97 иногда сбрасывает значения глобальных переменных. Пару раз в сутки, раз в три дня и т.д. Навести...

Сохранение глобальных переменных между сеансами работы с книгой - VBA
Привет! Спрошу, скорее всего, глупость, и заранее извиняюсь за это: беглый поиск в гугле при жестком цейт-ноте не дал результата. ...

Программа не хочет работать без объявления переменных - VBA
Sub practic6() 'Dim a As String a = "privet" MsgBox a End Sub если закоментировать dim, то выводит ошибку variable not defined....

В чем разница в тексте - VBA
в чем разница первый вариант работает второй нет? 1.With Assistant.NewBalloon .Text = "апрвара" .Show End With 2. ...

14
Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,098
Завершенные тесты: 2
15.07.2015, 01:26 #2
Цитата Сообщение от VeX Посмотреть сообщение
и можно ли вообще там объявлять переменные?
Там это где?

Добавлено через 11 минут
Цитата Сообщение от VeX Посмотреть сообщение
Скажите в чем разница объявления глобальных переменных в module1 или в ThisDocument?
Глобальные переменный объявленные в ThisDocument видны во всем документе, то есть в module1, module2 и т.д.
Глобальные переменные объявленные в module1 видны только в module1.
1
VeX
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
15.07.2015, 01:54  [ТС] #3
Там я имел ввиду thisdocument
сомневался можно ли там переменные объявлять
0
Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,098
Завершенные тесты: 2
15.07.2015, 01:58 #4
Цитата Сообщение от VeX Посмотреть сообщение
сомневался можно ли там переменные объявлять
Можно.
0
Hugo121
5998 / 2147 / 350
Регистрация: 19.10.2012
Сообщений: 6,421
15.07.2015, 09:52 #5
Цитата Сообщение от Sn1p3rOk Посмотреть сообщение
Глобальные переменный объявленные в ThisDocument видны во всем документе, то есть в module1, module2 и т.д.
Глобальные переменные объявленные в module1 видны только в module1.
Тесты показывают что оба утверждения ошибочны.

Добавлено через 3 минуты
Я в ThisDocument вообще пишу только макросы событий книги. Всё остальное в стандартные модули!
2
Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,098
Завершенные тесты: 2
15.07.2015, 15:58 #6
Цитата Сообщение от Hugo121 Посмотреть сообщение
Тесты показывают что оба утверждения ошибочны.
Хочу послушать ваши доводы. Особенно по поводу второго.
0
Hugo121
5998 / 2147 / 350
Регистрация: 19.10.2012
Сообщений: 6,421
15.07.2015, 16:16 #7
Так по поводу второго вообще бесспорно - глобальные (т.е. Public) объявленные в одном модуле - видны во всех модулях и формах.
0
Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,098
Завершенные тесты: 2
15.07.2015, 16:32 #8
Цитата Сообщение от Hugo121 Посмотреть сообщение
глобальные (т.е. Public)
Где вы видите в вопросе слово "Public" ? Речь идет о глобальной переменно объявленной через Dim. Вы же использовали модификатор доступа.
0
Hugo121
5998 / 2147 / 350
Регистрация: 19.10.2012
Сообщений: 6,421
15.07.2015, 16:36 #9
Материал из Википедии — свободной энциклопедии

В программировании глобальной переменной называют переменную, областью видимости которой является вся программа...


А слово Dim первым написали Вы
1
Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,098
Завершенные тесты: 2
15.07.2015, 17:48 #10
Цитата Сообщение от Hugo121 Посмотреть сообщение
В программировании глобальной переменной называют переменную, областью видимости которой является вся программа...
Вы немножко не понимаете суть этой цитаты.
И ещё раз повторюсь речь идет о глобальной переменной в modul1 и в ThisDocument про остальное речи нет.
То есть, допустим это module1
Visual Basic
1
2
3
4
5
Dim глобальнаяПеременная As Integer
 
Sub НекотораяПроцедура()
    Dim локальнаяПеременная As Integer
End Sub
Естественно, если переменная объявлена
Visual Basic
1
Public переменная As Integer
то она будет доступна во всех модулях
0
The_Prist
1301 / 282 / 63
Регистрация: 13.11.2008
Сообщений: 588
16.07.2015, 12:57 #11
Цитата Сообщение от Sn1p3rOk Посмотреть сообщение
Вы немножко не понимаете суть этой цитаты
Не согласен. Скорее Вы не понимаете. Глобально - это значит везде, во всем проекте. Еще такие переменные называют объявленными на уровне проекта. А переменные, объявленные оператором Dim в области объявлений модуля - называют переменными модуля, т.к. действуют они исключительно в пределах того модуля, внутри которого объявлены.
В модулях класса глобальные переменные вообще бессмысленны. Попробуйте в ThisDocument объявить переменную As Public:
Visual Basic
1
Public dD as Date
Затем создайте новый стандартный модуль и запишите в нем две процедуры:
Visual Basic
1
2
3
4
5
6
Sub test1()
    dD = Date
End Sub
Sub test2()
    MsgBox dD
End Sub
Попробуйте их выполнить и посмотрите на результат. Если у Вас декларировано объявление переменных(Option Explicit) - то VBA сразу заругается, что переменная dD не объявлена. Если не декларировано, то после выполнения процедуры test1, последующее выполнение test2 выдаст пустой MsgBox, т.к. dD будет пуста.
Сделайте тоже самое, но объявите переменную dD в любом стандартном модуле. Поймете того, что в ThisDocument нельзя объявить глобальную переменную.

А автор темы не уточнял: Dim или Public. Он спрашивал про глобальные в module и ThisDocument. А Вы его в заблуждение вводите, не приводя доступные аргументы своей позиции, возводя все в спор и попытки доказать свою позицию(неверные, судя по написанному).
5
VeX
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
21.07.2015, 02:23  [ТС] #12
Последнее утверждение кстати верно, т.к. у меня тоже самое - переменные объявленные в thisDocument не видны из стандартных модулей => отсюда и был вопрос можно ли в thisDocument переменные объявлять для всего документа? Выходит что нельзя
0
pashulka
2147 / 1021 / 414
Регистрация: 01.12.2010
Сообщений: 2,158
21.07.2015, 07:28 #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от VeX Посмотреть сообщение
у меня тоже самое - переменные объявленные в thisDocument не видны из стандартных модулей
Модуль ThisDocument

Visual Basic
1
Public openDate As Date
Любой стандартный модуль

Visual Basic
1
2
3
4
5
6
7
Private Sub Test1()
    ThisDocument.openDate = Date
End Sub
 
Private Sub Test2()
    MsgBox ThisDocument.openDate
End Sub
4
Hugo121
5998 / 2147 / 350
Регистрация: 19.10.2012
Сообщений: 6,421
21.07.2015, 08:58 #14
Т.е. можно если очень хочется Спасибо, pashulka.
Но т.к. у меня нет доверия макросам модуля книги (кроме конечно событий книги) - были глюки, то не вижу смысла объявлять переменные там, а не в стандартном модуле, что всегда гарантированно работает.
0
pashulka
2147 / 1021 / 414
Регистрация: 01.12.2010
Сообщений: 2,158
21.07.2015, 19:36 #15
Hugo121, это была не агитация ибо переменная Public/Global + стандартный модуль =
0
21.07.2015, 19:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2015, 19:36
Привет! Вот еще темы с ответами:

В чем разница между Office 2003 и XP - VBA
не пойму в чем разница между Office 2003 и XP, в XP макрос работет на 2003 нет... пробую запустить на другом компе с Office 2003 макрос...

В чем разница между файлами *.doc и *.dot - VBA
Здравствуйте, есть файл *.doc - работает как нужно, в нём есть много всего, модули, классы модуля, макросы. Но мне нужен шаблон, я просто...

В чем разница объявления массивов - Turbo Pascal
const n=5; m=4; var a:array of integer; и var a:array of integer; И дайте пожалуйста хорошую статью про массивы

В чем заключается особенность предварительного описания процедуры в начале модуля после объявления его переменных? - 1С
В чем заключается особенность предварительного описания процедуры в начале модуля после объявления его переменных?


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

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

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