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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2010, 01:42   #1
chillUA
 
Регистрация: 16.03.2010
Сообщений: 7
Вопрос Скрыть глобальные переменные

Доброе время суток.

Подскажите пожалуйста как в Excel 2003 используя VBA можно создать и сохранить глобальные переменные. Можно конечно и на отдельном листе, но тогда нужно спрятать эти значения от пользователя и сохранить их. Собственно это будет количество заполненых строк и номера 1й и последней строки. Заранее спасибо.
chillUA вне форума Ответить с цитированием
Старый 14.04.2010, 02:08   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Самое простое,спрячте записью в реестре
Код:


Public Const APPNAME As String = "Переменные"
Public Const DEVNAME As String = "Мои"

Public Нач_диапазона  As Integer 
Public Кон_диапазона  As Integer 
-------------------------------------------------
применение
Считывание,при отсутствии данных равно 0
Нач_диапазона = GetSetting(DEVNAME, APPNAME, "Нач_диапазона",0)
Кон_диапазона = GetSetting(DEVNAME, APPNAME, "Кон диапазона",0) 

Запись
SaveSetting DEVNAME, APPNAME, "Нач диапазона", Нач_диапазона
  
SaveSetting DEVNAME, APPNAME, "Кон диапазона", Кон_диапазона
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 14.04.2010 в 02:17.
doober вне форума Ответить с цитированием
Старый 14.04.2010, 02:20   #3
chillUA
 
Регистрация: 16.03.2010
Сообщений: 7
По умолчанию

Не понимаю зачем тут реестр. Перефольмулирую:

1-е Как обьявить глобальную переменную которую можно инициализировать и использовать в разных модулях (или хотя бы в одном модуле но разными функциями), тоесть чтобы она сохраняла значение для всех?

У меня почему-то переменная обьявляется для всех модулей (функций), но в каждом модуле должна инициилизироватся отдельно иначе выдает ошибку.



2-е Сохранить значение, так чтоб пользователь его не видел, но оно было при следующем открытии документа?

Это проще сделать, сохранив данные на листе, но как их спрятать (чтоб не редактировали)?. Можно, наверное, записывать перед закрытием и считывать только раз после открытия. Тогда нужна глобальная переменная.
chillUA вне форума Ответить с цитированием
Старый 14.04.2010, 02:26   #4
chillUA
 
Регистрация: 16.03.2010
Сообщений: 7
По умолчанию

Извините, не увидел код. Наверное, прочитал перед правкой.

Спасибо. Щас гляну в Гугл.
chillUA вне форума Ответить с цитированием
Старый 14.04.2010, 03:17   #5
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

chillUA, да в общем то реестр тут действительно не очень нужен (если не ставится задача передачи данных между книгами).
1)Объявляйте переменную на уровне модуля как Global
Код:
Global МакcимальныйНомерСтроки as long
2)Но удобнее использовать Property для сохранения/извлечения информации из невидимого элемента коллекции Names.
В модуль кода добавляете
Код:
Public Property Let НомерСтроки(i As Long)
   On Error Resume Next
   With ActiveWorkbook.Names
       .Item("НомерСтроки").Delete
       .Add "НомерСтроки", Format$(i, """=""#"), False
   End With
End Property

Public Property Get НомерСтроки() As Long
   On Error Resume Next
   With ActiveWorkbook.Names
       НомерСтроки = CLng(Mid$(.Item("НомерСтроки"), 2))
       If Err.Number <> 0 Then
           НомерСтроки = 0
       End If
   End With
End Property
В коде на VBA можно после этого писать просто
Код:
НомерСтроки = НомерСтроки+1
И разумеется нужно сохранять книгу при выходе.
Этот вариант более мобилен так как информация сохраняется непосредственно в книге.
Кроме того, так как мы определяем имя, на любом рабочем листе вы можете просто писать в ячейку формулу =НомерСтроки.

Последний раз редактировалось Aent; 14.04.2010 в 03:41.
Aent вне форума Ответить с цитированием
Старый 22.04.2010, 22:50   #6
chillUA
 
Регистрация: 16.03.2010
Сообщений: 7
По умолчанию

Использовал в коде ваш совет. Работает, но после окрытия книги выдает такое:



С чем это может быть связано?

Последний раз редактировалось chillUA; 22.04.2010 в 22:59.
chillUA вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальные переменные tae1980 Microsoft Office Excel 16 20.11.2013 08:41
Глобальные переменные werser Помощь студентам 5 23.03.2010 18:08
Глобальные переменные Serghant Общие вопросы C/C++ 3 05.11.2009 20:51
Локальные и глобальные переменные. Proger10 Общие вопросы Delphi 1 04.05.2009 05:55