VBA Userform сохраняет значения в следующий раз

Я не могу найти что-либо в Интернете о сохранении входных значений для следующей загрузки пользовательской формы. Это вопрос VBA.

Я хочу, чтобы пользователь мог ввести путь на странице настроек и использовать этот путь для каждого момента загрузки пользовательской формы. Пользователь не должен вводить путь каждый раз, когда он открывает пользовательскую форму. Путь вводится в текстовое поле. Как заставить Excel хранить путь до следующей загрузки?

Благодаря!

Один из способов – это …

Объявите общедоступную переменную на стандартном модуле, например …

Public Path As String 

Затем в модуле UserForm есть следующий код для события TextBox AfterUpdate …

 Private Sub TextBox1_AfterUpdate() Path = TextBox1.Value End Sub 

Переменная Path будет содержать TextBox1.Value для текущего сеанса, и пользователю не нужно будет предоставлять Path снова в TextBox1.

Если вы чувствуете себя авантюрно, вот решение, которое даст вам удовольствие. Начните с стандартного модуля кода. По умолчанию он будет называться Module1 . В этом модуле введите следующие две процедуры. Не имеет значения, что вы называете модулем, но не забудьте использовать модуль кода ThisWorkbook и ни один из модулей кода, названных в честь рабочих листов.

Функция «SavedDataFileName» – это место, где вы объявляете местоположение, в котором вы хотите сохранить данные, которые нужно запомнить. Вы можете использовать любое место, которое вам нравится. код определяет такое местоположение, как C:\Users\[Your Name] . Вы также можете изменить имя файла. Дело в том, что все это хранится в одном месте, откуда оно извлекается, когда файл читается и когда он записывается.

 Option Explicit Function SavedDataFileName() As String ' create this as a function to be called by various parts of your code ' so that you don't have to repeat it in many places in case of future change SavedDataFileName = Environ("USERPROFILE") & "\SavedPath.txt" End Function 

Следующая функция читает только что указанный текстовый файл. На самом деле, это код, который я готов. Поэтому он может считывать множество данных. Вы только хотите прочитать один – путь. Он сделает это.

 Function TextFile(Ffn As String, _ MaxLines As Integer) As String() ' 17 Oct 2016 Dim Fun() As String ' Function return Dim i As Integer Dim Fid As Integer ' File ID If Len(Dir(Ffn)) Then ReDim Fun(MaxLines) ' arbitrary maximum Fid = FreeFile() Open Ffn For Input As #Fid While Not EOF(Fid) Line Input #Fid, Fun(i) Fun(i) = Trim(Fun(i)) i = i + 1 Wend Close #Fid ReDim Preserve Fun(i - 1) End If TextFile = Fun End Function 

Теперь, пожалуйста, перейдите в кодовый лист вашей формы, на котором вы хотите сохранить данные. Все следующие процедуры должны быть в этой форме. Не устанавливайте их нигде. Они могут работать только при установке на этом конкретном листе кода.

Первая процедура запускается, когда форма инициализируется, что означает, когда она сначала создается – при запуске.

 Option Explicit Private Sub UserForm_Initialize() ' 13 May 2017 Dim SavedData() As String On Error GoTo EndRetrieval SavedData = TextFile(SavedDataFileName, 10) TextBox1.Text = SavedData(0) ' you can pre-load more controls in your form here EndRetrieval: End Sub 

В этом разделе текстовый файл открывается и импортируется из него. Ожидается максимум 10 данных. Вы можете установить это число выше или ниже. Чем выше вы установите, тем больше будет использовано пространство памяти. Вам нужен только один элемент данных. Это будет иметь номер индекса 0 (ноль), и он назначен для TextBox1. Вы можете это изменить, конечно. Если возникнет ошибка, ничего не будет сделано, и текстовое поле останется пустым.

Следующая процедура будет выполняться всякий раз, когда вы выходите из TextBox1. Конечно, вы можете изменить его имя, чтобы ссылаться на другое текстовое поле. Его цель – убедиться, что текстовое поле содержит допустимое имя пути. Если пользователь вводит то, что не является допустимым именем, ему будет сказано так.

 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' 13 May 2017 Dim Ffn As String ' Full file name Ffn = Trim(TextBox1.Text) On Error Resume Next MsgMe Dir(Ffn & "\", vbDirectory) & ", " & Len(Dir(Ffn & "\", vbDirectory)) Cancel = (Len(Ffn) = 0) Or (Len(Dir(Ffn & "\", vbDirectory)) = 0) If Not Cancel Then Cancel = CBool(Err.Number) ' in case Dir(Ffn) caused an error If Cancel Then MsgBox "The path you entered isn't valid." & vbCr & _ "Please enter a valid path." Else TextBox1.Text = Ffn ' removed leading/trailing blanks End If End Sub 

Окончательная процедура выполняется, когда форма закрыта. Он записывает текущую настройку TextBox1 в текстовый файл, откуда он будет извлекаться при следующем загрузке формы.

 Private Sub UserForm_Terminate() ' 12 May 2017 Open SavedDataFileName For Output As #1 Print #1, TextBox1.Text ' you can write more data to be remembered here Close #1 End Sub 

Эта процедура записывает только одну строку в текстовый файл. Если вы хотите сохранить больше элементов, просто распечатайте в файле больше значений. Обратите внимание, что качество сохраненных данных не проверяется. Это было сделано после того, как оно было введено. Если пользователю удалось провести контрабанду неправильного пути в текстовое поле, то на следующее утро он вернется, чтобы преследовать его.

  • Стрелка в текстовом поле пользовательской формы, VBA
  • Написание кода / макроса Excel VBA для заполнения текстовых полей Powerpoint с значениями ячейки Excel
  • Блокировка TextBox от перемещения и изменения размера листа и только редактирование текста Excel VBA
  • Текст текстового поля в Excel VBA
  • Удалить строку из текстового поля в слайде PowerPoint из папки - Компонент Error ActiveX не может создать объект
  • Как установить имя текстового поля как переменную и разрешить изменять имя в цикле?
  • Скопировать и вставить содержимое из текстового поля в диапазон ячеек рабочего листа?
  • Как выбрать данные в TextBox или ListBox, а затем отправить электронную почту через Outlook на основе этих данных
  • Зацикливание через файлы Txt с использованием проблемы VBA - DIR ()
  • Текст текстового поля исчезает при вводе текста Excel VBA - часть 2
  • Управление текстовым полем в Excel - как ссылаться в Perl
  • Interesting Posts

    xlDistinctCount в сводной таблице не работает по назначению – VBA

    Таблица: Использование памяти WriteExcel

    Как открыть Excel, если он еще не открыт

    Отправить Ключи к Блумбергу

    Чтение Excel и преобразование его в вложенный словарь

    Ошибка 9 с использованием ReDim Preserve

    Как остановить Py_Initialise сбой приложения?

    объединить данные в excel с использованием openpyxl в Python

    Формула Excel для возврата всех соответствующих строк в ячейке

    Получение разницы в ячейках

    Экспортировать, чтобы выделить несколько файлов из одной таблицы в Laravel 5.4

    Как использовать функцию Excel «= SUMPRODUCT (- ISNUMBER (SEARCH …»), чтобы исключить «сложные составные» результаты?

    Объединить 2 файла Excel с разными столбцами, используя форму пользователя для выбора файлов, а затем сопоставление столбцов

    Доступ к коду VBA 2016 для экспорта в Excel, «не удалось найти устанавливаемый ISAM»

    Стандартизация ингредиентов для базы данных

    Давайте будем гением компьютера.