Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2009, 20:31   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Глобальные переменные

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

Наивный вопрос: как это сделать?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 24.02.2009, 21:43   #2
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию

Попробуйте к примеру так:

Public i As Integer
SIV84 вне форума Ответить с цитированием
Старый 24.02.2009, 21:49   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от SIV84 Посмотреть сообщение
Попробуйте к примеру так:

Public i As Integer
А где это нужно делать?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 24.02.2009, 21:55   #4
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию

Когда объявляете переменную

Например:

Public ksbaza As Integer
Public ksusf As Integer
Public nn As Integer
Dim i As Integer

Private Sub UserForm_Initialize()
Do Until Workbooks("Áàçà").Sheets("Áàçà").Ce lls(i, 1) = ""
ksbaza = i
i = i + 1
Loop
i = 1
Do Until Workbooks("Áàçà").Sheets("Ó÷åò ñ÷åò-ôàêòóð").Cells(i, 2) = ""
ksusf = i
i = i + 1
Loop
End Sub


Sub l1()
With UserForm28
For i = 1 To .ksbaza

b = Workbooks("Áàçà").Sheets("Áàçà").Ce lls(i, 1)
If a = b Then
.Frame1.Controls("TextBox" & i1 + 1).Value = Workbooks("Áàçà").Sheets("Áàçà").Ce lls(i, 2)
.Frame1.Controls("TextBox" & i1 + 2).Value = Workbooks("Áàçà").Sheets("Áàçà").Ce lls(i, 8)
...
...
...
end sub

В данном случаи переменные ksbaza и ksusf являются глобальными т.е. работать с ними можно при работе других макросов
SIV84 вне форума Ответить с цитированием
Старый 24.02.2009, 22:01   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от SIV84 Посмотреть сообщение
Когда объявляете переменную

Например:

Public ksbaza As Integer
Public ksusf As Integer
Public nn As Integer
Dim i As Integer

Private Sub UserForm_Initialize()
{...}
End Sub


Sub l1()
{...}
end sub

В данном случаи переменные ksbaza и ksusf являются глобальными т.е. работать с ними можно при работе других макросов
Как я понял эти переменные объявлены _вне_ тела какого либо макроса. Или я что-то не так понял?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 24.02.2009, 22:05   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
А где это нужно делать?
Если это сделать на уровне модуля, т.е. не внутри функции или процедуры, а в самом верху, то переменные объявленные как Public, будут видны и в других модулях этой книги. Если же это сделать внутри функции, или процедуры, то такие переменные будут видны только внутри того модуля, где эта процедура находится.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 24.02.2009, 22:07   #7
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию

немножко не правильно, я их объявлял при запуску работы формы (либо макроса)

можно опопробывать и следующий вариант:

К примеру в UserForme1 вы объявляете пепеменную a.

Попробуйте использовать ее в других формах или макросах следуюштм образом, к примеру

TextBox1.Value=UserForm1.a
SIV84 вне форума Ответить с цитированием
Старый 24.02.2009, 22:12   #8
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Если это сделать на уровне модуля, т.е. не внутри функции или процедуры, а в самом верху, то переменные объявленные как Public, будут видны и в других модулях этой книги. Если же это сделать внутри функции, или процедуры, то такие переменные будут видны только внутри того модуля, где эта процедура находится.
Очень интересно... Сразу вопросы:
1. Как обратиться к глобальной переменной из другой книги?
2. Как обратиться к глобальной переменной другого модуля?
3. При размещении глобальных переменных внутри макросов (читай для ограничения видимости переменной текущим модулем), как сделать так что бы этот макрос обязательно был выполнен первым в текущем модуле?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 24.02.2009, 22:23   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
Очень интересно... Сразу вопросы:
1. Как обратиться к глобальной переменной из другой книги?
2. Как обратиться к глобальной переменной другого модуля?
3. При размещении глобальных переменных внутри макросов (читай для ограничения видимости переменной текущим модулем), как сделать так что бы этот макрос обязательно был выполнен первым в текущем модуле?
Сразу ответы.
  1. Записать в богом забытую ячейку и прочитать
  2. Можно просто по имени. Можно для верности указать имя модуля, т.е. Module1.Myvar
  3. Вызвать эту процедуру первой.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 28.02.2009, 10:18   #10
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от SIV84 Посмотреть сообщение
Когда объявляете переменную
Например:
Public ksbaza As Integer
Public ksusf As Integer
Public nn As Integer
Dim i As Integer
А как задать начальные значения для этих переменных?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменные скрипта wall66 PHP 7 12.12.2008 17:14
Переменные REAL Terabit Паскаль, Turbo Pascal, PascalABC.NET 9 03.11.2008 21:26
Глобальные хуки Zeraim Win Api 2 24.05.2008 16:00
Переменные из БД Кронос БД в Delphi 2 06.06.2007 11:26