Здравствуйте!
Как заставить CheckBox и textBox запоминать значения даже после закрытия формы и файла excel?
Илья, в сами элементы управления нельзя записать данные, чтобы данные сохранились после закрытия формы.
В Вашем случае можно придумывать различные способы:
- сохранение в txt-файл на жёсткий диск компьютера;
- запись куда-то в Excel, в какие-то скрытые области;
- можно в сам макрос записывать, но нужно помнить, что если будете передавать макрос другому человеку, то у человека должен стоять флажок "Предоставлять доступ к объектной модели проектов VBA", иначе макрос не сработает;
- запись в реестр операционной системы "Windows";
- ещё что-нибудь придумать.
- сохранение в txt-файл на жёсткий диск компьютера;
Как реализовать этот вариант? Можно примерчик?
Процедуру "UserForm_Terminate" нужно поместить в модуль формы.
Макрос
'Процедура "UserForm_Terminate" сработает, когда форма начнёт закрываться и удаляться из
'оперативной памяти компьютера.
Private Sub UserForm_Terminate()
'В константе нужно указать полное имя txt-файла, в который будут записываться данные из текстбокса.
Const strFN As String = "C:\Users\User\Desktop\Новый текстовый документ.txt"
'Открытие txt-файла. Если файла нет, то будет создан.
'Output переводится "вывод".
'Если перевести, то получится примерно так:
'открыть файл для вывода.
'Но на самом деле, мы открывает файл для ввода. Нестыковка в терминах.
'#1 - это имя, которое присваиваем файлу. Через это имя можно воздействовать на файл.
'Знак "#" можно не использовать - для чего он нужен - не известно.
Open strFN For Output As #1
'Запись данных из текстбокса в txt-файл.
Print #1, Me.TextBox1.Text
'Закрытие txt-файла. При этом происходит и сохранение файла.
'Хотя, может быть, сохранение происходит в момент записи данных в txt-файл - нужно проверять.
Close #1
End Sub
Спасибо, понятно.
А как в один тхт сохранить данные из нескольких textbox-ов?
Private Sub UserForm_Terminate()
'В константе нужно указать полное имя txt-файла, в который будут записываться данные из текстбоксов.
Const strFN As String = "C:\Users\User\Desktop\Новый текстовый документ.txt"
Open strFN For Output As #1
'Запись данных из текстбоксов в txt-файл.
Print #1, Me.TextBox1.Text
Print #1, Me.TextBox2.Text
Close #1
End Sub
Позволю себе задать еще один вопрос.
А обратно как? Как обратиться к данным, находящимся в тхт файле, для отражения в textbox-ах?
Процедуру "UserForm_Initialize" нужно поместить в модуль формы.
Макрос
'Процедура "UserForm_Initialize" запустится сразу после того, как
'форма загрузится в оперативную память компьютера.
Private Sub UserForm_Initialize()
'В константе нужно указать полное имя txt-файла, из которого текстбоксы будут брать данные.
Const strFN As String = "C:\Users\User\Desktop\Новый текстовый документ.txt"
Dim strText As String
'Слово "Input" переводится "ввод".
'Если перевести строку ниже на английский язык, то примерно будет так:
'открыть файл для ввода.
'Но на самом деле, файл откроется для вывода. Нестыковка в терминах.
Open strFN For Input As #1
'Взятие данных из txt-файла в тестбоксы.
'Сразу не получается поместить данные из txt-файла в текстбокс.
'Поэтому сначала данные берутся в переменную "strText".
'Переход по строкам txt-файла происходит автоматически при использовании команды "Line Input".
'Т.е. произошла команда "Line Input", макрос автоматически перешёл на следующую строку в txt-файле.
Line Input #1, strText
Me.TextBox1.Text = strText
Line Input #1, strText
Me.TextBox2.Text = strText
Close #1
End Sub
Спасибо, все понятно.