В коде ниже я вытягиваю в форму значения из реестра при первоначальной загрузке.
Помогите пожалуйст решить два вопроса:
1.Как сделать так, чтобы , когда еще нет записей в реестре от предыдущих сессий , в форму при первоначальной загрузке подтягивались бы данные по -умолчанию указанные в строках 20,30,40,50 ?
В процедуре Getdefaults я прописал строку 10 , которая по-идее, если реестр еще нулевой, должна подтягивать в форму значения по -умолчанию ctl.value (4й аргумент в функции GetSettings) , но это не работает...подтягиваются пустые строки.
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
' Процедура выхода из формы 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
Call GetDefaults 'получаем значения из реестра по прошлой сессии
End Sub
[/vba]
Заранее спасибо, за помощь!
Всем доброго дня!
В коде ниже я вытягиваю в форму значения из реестра при первоначальной загрузке.
Помогите пожалуйст решить два вопроса:
1.Как сделать так, чтобы , когда еще нет записей в реестре от предыдущих сессий , в форму при первоначальной загрузке подтягивались бы данные по -умолчанию указанные в строках 20,30,40,50 ?
В процедуре Getdefaults я прописал строку 10 , которая по-идее, если реестр еще нулевой, должна подтягивать в форму значения по -умолчанию ctl.value (4й аргумент в функции GetSettings) , но это не работает...подтягиваются пустые строки.
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
' Процедура выхода из формы 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