Форма пользователя VBA, как сохранить ранее введенные значения для следующего открытия - PullRequest
0 голосов
/ 25 января 2019

Итак, у меня есть эта пользовательская форма, в которую пользователь вводит данные, некоторые в комбинированных полях, а некоторые в текстовых полях. Затем эти данные заполняются на листе. Каков наилучший способ заставить пользователя снова отобразить эти данные, когда они будут открыты в следующий раз? Поэтому, если пользователь вводит «2014» в поле «Модель / год запуска», а затем нажимает «Отправить» и закрывает поле «От», в следующий раз, когда он откроет его, я хочу, чтобы в этом поле по-прежнему было указано «2014». Код ниже и работает, он, вероятно, грязный и неэффективный, так как я новичок в кодировании и vba, я больше озабочен тем, чтобы заставить эту функцию работать здесь, а не оптимизировал мой код. Спасибо!

enter image description here

'=========================================================Populating User Form Drop Downs============================================================
Private Sub UserForm_Initialize()

'populate OEM drop down
With Me.ComboBox1
    .AddItem "GM"
    .AddItem "Ford"
    .AddItem "FCA"
    .AddItem "Toyota"
    .AddItem "Nissan"
    .AddItem "Isuzu"
    .AddItem "Other"
End With

'populate Program stage dropdown
With Me.ComboBox4
    .AddItem "Screen Approval"
    .AddItem "Quote Approval"
    .AddItem "Program Start"
    .AddItem "Design Verification Release"
    .AddItem "Production Validation Release"
    .AddItem "Production Part Approval Process"
    .AddItem "Start of Production"
    .AddItem "Program Closure"
End With

'Populate Milestones

Dim M1 As Variant
M1 = Sheets("Monthly Status").Range("G23")
M13 = Sheets("Monthly Status").Range("G35")
M14 = Sheets("Monthly Status").Range("G36")
M15 = Sheets("Monthly Status").Range("G37")
M16 = Sheets("Monthly Status").Range("G38")
M17 = Sheets("Monthly Status").Range("G39")
M24 = Sheets("Monthly Status").Range("G46")
M25 = Sheets("Monthly Status").Range("G47")
M26 = Sheets("Monthly Status").Range("G48")
M37 = Sheets("Monthly Status").Range("G59")

'Populate OP drop down

With Me.ComboBox2
    .AddItem M1
    .AddItem M13
    .AddItem M14
    .AddItem M15
    .AddItem M16
    .AddItem M17
    .AddItem M24
    .AddItem M25
    .AddItem M26
    .AddItem M37
End With

End Sub
Private Sub Submit_Click()

'======================================================Filling Header Feilds From User Form==========================================================

Dim OEM As String
Dim Var As String
Dim Year As String
Dim Veh As String
Dim VehC As String
Dim DRE As String
Dim ID As String
Dim Unit As String
Dim AAE As String
Dim DTE As String
Dim Stage As String

'Fill OEM box
    OEM = ComboBox1.value
    Sheets("Monthly Status").Range("E7:G7") = OEM

'Fill Variant(s) box
    Var = TextBox2.value
    Sheets("Monthly Status").Range("E8:G8") = Var

'Fill Model / Launch Year
    Year = TextBox3.value
    Sheets("Monthly Status").Range("I7") = Year

'Fill Vehicle(s) Box
    Veh = TextBox4.value
    Sheets("Monthly Status").Range("I8:L8") = Veh

'Fill Vehicle Code(s) Box
    VehC = TextBox5.value
    Sheets("Monthly Status").Range("L7:O7") = VehC

'Fill Acoustics DRE Box
    DRE = TextBox6.value
    Sheets("Monthly Status").Range("R7:S7") = DRE

'Fill Program ID Box
    ID = TextBox7.value
    Sheets("Monthly Status").Range("R8:S8") = ID

'Fill Reporting Region/Business Unit
    Unit = TextBox8.value
    Sheets("Monthly Status").Range("R12") = Unit

'Fill Assigned AAE
    AAE = TextBox9.value
    Sheets("Monthly Status").Range("R13") = AAE

'Fill Assigned DTE
    DTE = TextBox10.value
    Sheets("Monthly Status").Range("R14") = DTE

'Full Current TenPLUS Program Stage
    Stage = ComboBox4.value
    Sheets("Monthly Status").Range("R16") = Stage

End Sub

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Во время инициализации вы загружаете значения, которые вы сохранили ранее, например,

TextBox1.Text = "Selected Vehicle"
...
Combobox1.ListIndex = ComboBox1_SelectionInt
Combobox2.ListIndex = ComboBox2_SelectionInt
...

Возможно, вы захотите использовать предложение Me.hide, указанное выше.

Во время загрузки me.unload или при закрытии книги вы сохраняете значения формы, которые хотите сохранить, например, на скрытый лист (например, с именованными диапазонами)

With Workheets("HiddenSheetForUserform")
    .Range("Textbox1") := "Textbox1 value"
    .Range("Textbox2") := "Textbox2 value"
    .Range("Textbox3") := "Textbox3 value"
    '...

    .Range("Combobox1") := ComboBox1_SelectionInt
    .Range("Combobox2") := ComboBox2_SelectionInt
End With
0 голосов
/ 25 января 2019

Используйте Me.Hide вместо Unload Me, и в следующий раз, когда вы .Show в пользовательской форме, она все равно будет содержать те же значения.

Однако: эти значения будут потеряны приВы закрываете и снова открываете рабочую книгу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...