Как заставить CheckBox и textBox запоминать значения

Автор Илья, 12 августа 2014, 09:10

Илья

Здравствуйте!
Как заставить 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
[свернуть]

Илья