Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Получить в ф-ме знач по-умолч, если реестр пуст или испорчен - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Получить в ф-ме знач по-умолч, если реестр пуст или испорчен
t330 Дата: Четверг, 23.05.2019, 17:53 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Всем доброго дня!

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

Помогите пожалуйст решить два вопроса:

1.Как сделать так, чтобы , когда еще нет записей в реестре от предыдущих сессий ,
в форму при первоначальной загрузке подтягивались бы данные по -умолчанию указанные в строках 20,30,40,50 ?

В процедуре Getdefaults я прописал строку 10 , которая по-идее, если реестр еще нулевой, должна подтягивать в форму значения по -умолчанию ctl.value (4й аргумент в функции GetSettings) , но это не работает...подтягиваются пустые строки.

[vba]
Код

10            ctl.Value = GetSetting(APPNAME, "Defaults", ctl.Name, ctl.Value)
[/vba]

2. Допустим мне нужно , чтобы при первоначальной загрузке в ТекстБоксы подтягивались из реестра после предыдущей сессии только числа.
Понятно, что для этого нужно сделать соответствующие проверки ТекстБоксов перед записью в реестр в процедуре SaveDefaults

НО вдруг попался злонамеренный Юзверь и руками в реестре поменял дефолтные числовые значения ТекстБоксов, записанные с предыдущей сессии, на текстовые
Поэтому, при запуске формы в нее подтянутся эти икореженные Юзверем неправильные данные.

Как прописать в процедуре GetDefaults проверку подтягиваемых значений из реестра?
То есть, если Текстбокс из реестра не число , то в форму ставится значение по -умолчанию из строк 20,30,40,50

Код Модуля

[vba]
Код

Option Explicit

Public Const APPNAME As String = "Test"
Public initial1 As Variant, initial2 As Variant, initial3 As Variant, initial4 As Variant

Sub test()

initial1 = 10
initial2 = "test"
initial3 = "12test"
initial4 = 23 / 12 / 2019

UserForm1.Show

End Sub
[/vba]

Код Userform

[vba]
Код

Option Explicit

' Процедура выхода из формы
Private Sub cbExit_Click()
Call SaveDefaults  ' пишем все данные из элементов формы в реестр
Unload Me
End Sub

'записываем в реестр все последние данные из формы
Sub SaveDefaults()
    Dim ctl As Control
    Dim CtrlType As String
    
    For Each ctl In Me.Controls
        CtrlType = TypeName(ctl)
        If CtrlType = "TextBox" Then
            SaveSetting APPNAME, "Defaults", ctl.Name, CStr(ctl.Value)
        End If
    Next ctl
End Sub

'получаем из реестра все последние данные из формы
Sub GetDefaults()
    Dim ctl As Control  ' переменная для элементов формы
    Dim CtrlType As String ' переменная для типа элемента формы
    
    For Each ctl In Me.Controls  ' в цикле перебираем все элементы формы
        CtrlType = TypeName(ctl) ' присваиваем переменной тип элемента формы
        If CtrlType = "TextBox" Then
10            ctl.Value = GetSetting(APPNAME, "Defaults", ctl.Name, ctl.Value)
            Debug.Print ctl.Name, ctl.Text
        End If
    Next ctl
End Sub

'Процедура иннициализации формы
Private Sub UserForm_initialize()
    Dim i As Integer
    Dim ThisYear As Integer
    Dim x As Object
    Me.Caption = APPNAME
       
20    TextBox1.Value = initial1
30   TextBox2.Value = initial2
40    TextBox3.Value = initial3
50    TextBox4.Value = initial4

Call GetDefaults 'получаем значения из реестра по прошлой сессии

End Sub

[/vba]

Заранее спасибо, за помощь!
К сообщению приложен файл: 8812523.xlsm (17.9 Kb)


Сообщение отредактировал t330 - Четверг, 23.05.2019, 19:16
 
Ответить
СообщениеВсем доброго дня!

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

Помогите пожалуйст решить два вопроса:

1.Как сделать так, чтобы , когда еще нет записей в реестре от предыдущих сессий ,
в форму при первоначальной загрузке подтягивались бы данные по -умолчанию указанные в строках 20,30,40,50 ?

В процедуре Getdefaults я прописал строку 10 , которая по-идее, если реестр еще нулевой, должна подтягивать в форму значения по -умолчанию ctl.value (4й аргумент в функции GetSettings) , но это не работает...подтягиваются пустые строки.

[vba]
Код

10            ctl.Value = GetSetting(APPNAME, "Defaults", ctl.Name, ctl.Value)
[/vba]

2. Допустим мне нужно , чтобы при первоначальной загрузке в ТекстБоксы подтягивались из реестра после предыдущей сессии только числа.
Понятно, что для этого нужно сделать соответствующие проверки ТекстБоксов перед записью в реестр в процедуре SaveDefaults

НО вдруг попался злонамеренный Юзверь и руками в реестре поменял дефолтные числовые значения ТекстБоксов, записанные с предыдущей сессии, на текстовые
Поэтому, при запуске формы в нее подтянутся эти икореженные Юзверем неправильные данные.

Как прописать в процедуре GetDefaults проверку подтягиваемых значений из реестра?
То есть, если Текстбокс из реестра не число , то в форму ставится значение по -умолчанию из строк 20,30,40,50

Код Модуля

[vba]
Код

Option Explicit

Public Const APPNAME As String = "Test"
Public initial1 As Variant, initial2 As Variant, initial3 As Variant, initial4 As Variant

Sub test()

initial1 = 10
initial2 = "test"
initial3 = "12test"
initial4 = 23 / 12 / 2019

UserForm1.Show

End Sub
[/vba]

Код Userform

[vba]
Код

Option Explicit

' Процедура выхода из формы
Private Sub cbExit_Click()
Call SaveDefaults  ' пишем все данные из элементов формы в реестр
Unload Me
End Sub

'записываем в реестр все последние данные из формы
Sub SaveDefaults()
    Dim ctl As Control
    Dim CtrlType As String
    
    For Each ctl In Me.Controls
        CtrlType = TypeName(ctl)
        If CtrlType = "TextBox" Then
            SaveSetting APPNAME, "Defaults", ctl.Name, CStr(ctl.Value)
        End If
    Next ctl
End Sub

'получаем из реестра все последние данные из формы
Sub GetDefaults()
    Dim ctl As Control  ' переменная для элементов формы
    Dim CtrlType As String ' переменная для типа элемента формы
    
    For Each ctl In Me.Controls  ' в цикле перебираем все элементы формы
        CtrlType = TypeName(ctl) ' присваиваем переменной тип элемента формы
        If CtrlType = "TextBox" Then
10            ctl.Value = GetSetting(APPNAME, "Defaults", ctl.Name, ctl.Value)
            Debug.Print ctl.Name, ctl.Text
        End If
    Next ctl
End Sub

'Процедура иннициализации формы
Private Sub UserForm_initialize()
    Dim i As Integer
    Dim ThisYear As Integer
    Dim x As Object
    Me.Caption = APPNAME
       
20    TextBox1.Value = initial1
30   TextBox2.Value = initial2
40    TextBox3.Value = initial3
50    TextBox4.Value = initial4

Call GetDefaults 'получаем значения из реестра по прошлой сессии

End Sub

[/vba]

Заранее спасибо, за помощь!

Автор - t330
Дата добавления - 23.05.2019 в 17:53
krosav4ig Дата: Четверг, 23.05.2019, 20:47 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Здравствуйте
[vba]
Код
dim v as variant
'...
v = GetSetting(APPNAME, "Defaults", ctl.Name, ctl.Value)
if isnumeric(v) then
    ctl.Value = v
endif
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Четверг, 23.05.2019, 20:47
 
Ответить
СообщениеЗдравствуйте
[vba]
Код
dim v as variant
'...
v = GetSetting(APPNAME, "Defaults", ctl.Name, ctl.Value)
if isnumeric(v) then
    ctl.Value = v
endif
[/vba]

Автор - krosav4ig
Дата добавления - 23.05.2019 в 20:47
t330 Дата: Четверг, 23.05.2019, 21:44 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Здравствуйте


Спасибо за ответ на 2й вопрос!

По первому вопросу оказывается итак все работает:) смотрел не в ту папку в реестре при тестировании:)
 
Ответить
Сообщение
Здравствуйте


Спасибо за ответ на 2й вопрос!

По первому вопросу оказывается итак все работает:) смотрел не в ту папку в реестре при тестировании:)

Автор - t330
Дата добавления - 23.05.2019 в 21:44
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!