Текстовые поля Userform остаются пустыми после повторного открытия файла Excel

#excel #vba #userform

#excel #vba #userform

Вопрос:

В настоящее время у меня есть пользовательская форма с несколькими страницами, так называемыми MultiPage , и каждая из них MultiPage имеет Textboxes , которые будут принимать входные данные от пользователя, и на каждой из этих страниц есть кнопка Back , Next и, в частности, кнопка next помогает переносить значения из пользовательской формы в лист Excel под названием "DoNotPrint-Setup" .

введите описание изображения здесь

   Private Sub btnNext2_Click()


    If cbClient = "" Or tbProject.Value = "" Or tbNumber.Value = "" Or tbRevision.Value = "" Or tbDate.Value = "" Or tbPMOC.Value = "" Or tbPMOE.Value = "" Or tbClientE.Value = "" Or tbClientN.Value = "" Or tbClientP.Value = "" Or tbClientSA1.Value = "" Or tbClientSA2.Value = "" Then
    If MsgBox("Form is not complete. Do you want to continue?", vbQuestion   vbYesNo) <> vbYes Then
    Exit Sub
    End If

End If

    With Sheets("DoNotPrint - Setup")
        .Range("C7").Value = Me.cbClient.Text
        .Range("C8").Value = Me.tbProject.Text
        .Range("C9").Value = Me.tbNumber.Text
        .Range("C10").Value = Me.tbRevision.Text
        .Range("C11").Value = Me.tbDate.Text
        .Range("C12").Value = Me.tbPMOC.Text
        .Range("C13").Value = Me.tbPMOE.Text
        .Range("C14").Value = Me.tbClientN.Text
        .Range("C15").Value = Me.tbClientE.Text
        .Range("C16").Value = Me.tbClientP.Text
        .Range("C17").Value = Me.tbClientSA1.Text
        .Range("C18").Value = Me.tbClientSA2.Text
End With
Me.MultiPage1.Value = 2

ending:
End Sub
  

Это то, что у меня есть для процесса инициализации файла ниже:

 Private Sub UserForm_Initialize()

    WizardProp.MultiPage1.Value = 0
    Me.MultiPage1.Style = fmTabStyleNone

End Sub
  

И в конце у меня есть кнопка «Готово», которая скроет пользовательскую форму

 Private Sub BtnFinish_Click()
    Me.Hide
End Sub
  

Итак, прямо сейчас он принимает выходные данные из формы пользователя и вводит значения в ячейку Excel, но когда я закрываю файл Excel, текстовые поля формы пользователя при повторном открытии остаются пустыми. Итак, есть ли способ взять значения из ячеек Excel и применить их к текстовым полям Userform при повторном открытии Userform??

Комментарии:

1. Вам просто нужно поменять местами ваши уравнения с события click на событие initialize.

Ответ №1:

Вам нужно будет создать логику для

  • A) Определение того, открываете ли вы новый файл (я рекомендую использовать проверку, чтобы найти последнюю строку в вашем листе данных, поскольку это довольно просто … то есть, если вы используете основной файл, который не содержит значений)

  • Б) После того, как вы установили флажок A, ваша инициализация выполняет одну из двух вещей (подумайте, оператор If): 1) открывается пустым, 2) открывается со значениями

Теперь первая часть B довольно проста, вы это уже поняли; вторая часть будет просто инвертировать ваш оператор With:

 With Sheets("DoNotPrint - Setup")
    .Range("C7").Value = Me.cbClient.Text
    .Range("C8").Value = Me.tbProject.Text
    .Range("C9").Value = Me.tbNumber.Text
    .Range("C10").Value = Me.tbRevision.Text
    .Range("C11").Value = Me.tbDate.Text
    .Range("C12").Value = Me.tbPMOC.Text
    .Range("C13").Value = Me.tbPMOE.Text
    .Range("C14").Value = Me.tbClientN.Text
    .Range("C15").Value = Me.tbClientE.Text
    .Range("C16").Value = Me.tbClientP.Text
    .Range("C17").Value = Me.tbClientSA1.Text
    .Range("C18").Value = Me.tbClientSA2.Text
End With
  

Становится (при внедрении в процедуру инициализации):

 With Sheets("DoNotPrint - Setup")
    Me.cbClient.Text = .Range("C7").Value
    '... 
    Me.tbClientSA1.Text = .Range("C17").Value
    Me.tbClientSA2.Text = .Range("C18").Value
End With
  

Комментарии:

1. Что касается части A, я не закончил поиск последней строки раньше, поэтому мне нужно будет использовать Range . Найти? excelcampus.com/vba/find-last-row-column-cell

2. @GoldFusion Смотрите: Разбивка последней строки / столбца Рона де Брюина и т.д.

3. Для этого нужен отдельный макрос или его можно привязать к «userform_initialize»?

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