{quote}{login=KukLP}{date=27.02.2011 10:59}{thema=}{post}Есть. Но каким боком тут Эксель?{/post}{/quote} Ну так сказать мне необходимо несколько переменных хранить в екселеа и при открытии книги получать эти значения
{quote}{login=}{date=27.02.2011 11:01}{thema=Re: }{post}{quote}{login=KukLP}{date=27.02.2011 10:59}{thema=}{post}Есть. Но каким боком тут Эксель?{/post}{/quote} Ну так сказать мне необходимо несколько переменных хранить в екселеа и при открытии книги получать эти значения{/post}{/quote} пардон в реестре
Для работы с реестром в VBA есть несколько функций (напр., GetSetting), но они записывают все данные в определенную папку. Чтобы читать и изменять прочие ветки реестра нужно впроект добавить класс для работы с ним. Например: http://refactormycode.com/codes/726-vb6-registry-editing-class
{quote}{login=KukLP}{date=27.02.2011 10:59}{thema=}{post}каким боком тут Эксель?{/post}{/quote} Серж, ты вопрос перечитай: "при запуске книги Проверить существует ли..."
Visual Basic умеет работать только с веткой HKEY_CURRENT_USER\ Software\VB and VBA Program Setting и только со строковыми ключами, но этого вполне достаточно, чтобы сохранять и считывать настройки своих программ:
Запись данных в реестр: SaveSetting AppName, Section, Key, Setting '// AppName - название вашей программы, Section - ключ, Key - имя параметра, Setting - строковое значение параметра
Чтение данных из реестра: GetSetting AppName, Section, Key, Default '// AppName - название вашей программы, Section - ключ, Key - имя параметра, Default - значение, которое будет возвращено функцией, если параметра не существует
Удаление данных из реестра: DeleteSetting AppName, Section, Key '// AppName - название вашей программы, Section - ключ, Key - имя параметра
Примечание: если вы хотите удалить подраздел целиком, то имя ключа указывать не нужно.
Получение всех имён и значений параметров заданного ключа: GetAllSetting AppName, Section '// AppName - название вашей программы, Section - ключ
Пример:
Dim intKeys As Integer, strKeys As Variant '// Объявляем переменные
{quote}{login=Юрий М}{date=27.02.2011 11:32}{thema=Re: }{post}{quote}{login=KukLP}{date=27.02.2011 10:59}{thema=}{post}каким боком тут Эксель?{/post}{/quote} Серж, ты вопрос перечитай: "при запуске книги Проверить существует ли..."{/post}{/quote} Юр, меня смутла строка [HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot] Calc это приложение OpenOffice.
Public Sub www() Dim s$, WshShell As Object Set WshShell = CreateObject("WScript.Shell") On Error Resume Next s = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot\id") If Err Then Err.Clear WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot\Id", "45445871" 'MsgBox WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot\id") 'WshShell.RegDelete "HKEY_LOCAL_MACHINE\SOFTWARE\CalcPot\id" End If End Sub
Народ, а может проще не заморачиваться с реестром, а хранить значения в Personal.xls? 1 способ - в ячейках листа Лист1 2 способ - в его коллекции CustomDocumentProperties ?
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
Это если есть PERSONAL.XLS - у клиента его может и не быть. Как может и не быть прав на запись в реестр. А вот права на запись текстового файла в папку пользователя обычно есть.
{quote}{login=}{date=27.02.2011 11:01}{thema=Re: }... мне необходимо несколько переменных хранить в екселеа и при открытии книги получать эти значения{/post}{/quote} Если значения нужны для всего Ёкселя, то хранить можно, например, как Список (Сервис-Параметры-Списки-...) А если только для конкретной книги, то в её CustomDocumentProperties. Например, вот так: Sub Save_Val_in_DocProp() ' сохранить в CustomDocumentProperties текущией книги значение Dim sMyVal$: sMyVal = "MyVal" ' значение, которое нужно сохранить With ThisWorkbook.CustomDocumentProperties On Error Resume Next .Add Name:="BookSetting", LinkToContent:=False, Type:=msoPropertyTypeString, Value:="" .Item("BookSetting").Value = sMyVal End With End Sub
Sub Restore_Val_from_DocProp() ' считать из CustomDocumentProperties текущией книги сохранённое значение Dim sMyVal$ On Error Resume Next sMyVal = ThisWorkbook.CustomDocumentProperties.Item("BookSetting").Value If Err Then sMyVal = "Error" End Sub
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
мой проект находиться на этапе защиты! мои идеи реализации были следующие -при первом открытии книги спрашивается серийный номер человек вводит(записываться значение в реестр) - следующий этап проверка hosts файла на наличие в нём содержимого связанные с сайтом проверки илцензии - Далее поределяем ip адрес - заходим на сайт на скрытыю страницу(подтвердение того что сайт именно тот) -после чего идёт веб запрос на страницу xxx.ru/index.php?lic=(Переменная которая храниться в реестре)&id=(серийный номер диска с) -php код проходиться по базе данного серийного номера и если находить такой серийный номер диска с то выводим 1 если 1 то продолжаем работать если 0 то отказываемся
{quote}{login=Hugo}{date=28.02.2011 03:30}{thema=}{post}Сколько копий будет работать с одним серийным номером?{/post}{/quote} от 1 до 50 тоже думал насчёт как реализовать, с тем учётом что могут меняться винты и соответственно серийные номера! придумал следующую схему. количество лицензий соответственно у начальника или у админа будет досутуп к админской части где он будет забивать серийные номера!
{quote}{login=Hugo}{date=28.02.2011 03:30}{thema=}{post}Сколько копий будет работать с одним серийным номером?{/post}{/quote} пока не проверял! я просто описал как хочу реализовать так сказать информация к размышлению!