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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2013, 12:20   #1
Stroy562
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 49
Восклицание Предопределение переменных или констант

Здравствуйте. Столкнулся с такой проблемой. В проекте очень часто используются ссылки одни и те же листы книги. Как упростить код что бы не обращаться постоянно к этим листам.
Пробовал создавать глобальные переменные
Перед первой процедурой первого модуля

Public blank
blank = Worksheets("Бланк")

Пробовал константы
Код в том же месте

Const blank = Worksheets("Бланк")

Заносил все это в процедуре static

Все не работает
Как быть?
Stroy562 вне форума Ответить с цитированием
Старый 13.02.2013, 12:29   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Public blank As Worksheet
При открытии книги или при первом использовании

Код:
Set blank = Worksheets("Бланк")
Ну и кроме этого - у каждого листа есть кодовое имя - можно использовать его и не задавать переменную вообще.

Код:
MsgBox blank.Name
MsgBox Sheet2.Name
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 13.02.2013 в 12:31.
Hugo121 вне форума Ответить с цитированием
Старый 13.02.2013, 12:38   #3
Stroy562
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 49
По умолчанию

То же все

И в процедуре и снаружи
Stroy562 вне форума Ответить с цитированием
Старый 13.02.2013, 12:40   #4
Stroy562
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
[CODE]

Ну и кроме этого - у каждого листа есть кодовое имя - можно использовать его и не задавать переменную вообще.

Код:
MsgBox blank.Name
MsgBox Sheet2.Name
Я думал использовать эту переменную так:

blank.Cells(1, 1)

Если в той же процедуре объявлять все супер

Set blank = Worksheets("Бланк")
blank.Cells(1, 1)


Но блин Такая куча кода получается пипец
Stroy562 вне форума Ответить с цитированием
Старый 13.02.2013, 12:42   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
И в процедуре и снаружи
так как считаете нужным, глобальная переменная в модуле, или локальная в каждой процедуре, как Вам удобнее.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.02.2013, 12:42   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно и так.
Сообразите пример и покажите (файл) - подправим.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 13.02.2013, 12:50   #7
Stroy562
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 49
По умолчанию

Public Sub str()
Set blank = Worksheets("Бланк")
Set art = Worksheets("Документы")
Set kredit = Worksheets("Приходы")
Set debet = Worksheets("Расходы")
Set uzers = Worksheets("Контрагенты")
Set nomenklat = Worksheets("Справочник")

<---
Работа с объявленными ссылками
blank.Cells(1, 1)
--->
End Sub



Это не полный список листов с которыми приходится работать Что делать чтобы не ссылаться на них в каждой процедуре?
Stroy562 вне форума Ответить с цитированием
Старый 13.02.2013, 12:54   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну так объявите их глобальными.
Или задайте им один раз такие кодовые имена (вручную, или макросом) и затем используйте их уже без всяких объявлений.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 13.02.2013, 13:01   #9
Stroy562
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ну так объявите их глобальными.
Или задайте им один раз такие кодовые имена (вручную, или макросом) и затем используйте их уже без всяких объявлений.

Public blank As Worksheet
Set blank = Worksheets("Бланк")


Я же писал НЕ работает Ошибка
Stroy562 вне форума Ответить с цитированием
Старый 13.02.2013, 13:09   #10
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Не пойму, в чем у Вас проблема.
У меня в книге, в самом начале стандартного модуля написано
Код:
Public Const КнигаАрх = "АрхивБТ_v5.5.xls"
Public Const КнигаРев = "РевизияБТ_v5.5.xls"
Public Const КнигаПрод = "ПродажиБТ.xls"
Public Const КнигаДоговор = "АрхивДоговор.xls"
Public Const КнигаФО = "АрхивФинОтчетБТ.xls"
В дальнейшей работе обращаюсь к этим константам из любой процедуры.
Код:
Workbooks.Open filename:=ph & "\" & КнигаАрх
Все работает
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

Последний раз редактировалось VictorM; 13.02.2013 в 13:12.
VictorM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли задать глобальную переменную из функции или как-то напрямую использовать память для хранения переменных из функции? Suny-o Общие вопросы Delphi 2 14.06.2012 11:45
Предопределение класса clopcad Общие вопросы C/C++ 3 02.12.2011 23:12
Предопределение класса clopcad C++ Builder 0 01.12.2011 21:14
Предопределение iostrem в с++ Паыел Помощь студентам 1 26.10.2010 23:43
Смысл констант Alex Cones Свободное общение 18 29.03.2010 10:09