VBA userform - значение по умолчанию для динамического текстового поля - PullRequest
0 голосов
/ 28 августа 2018

У меня есть два TextBox в моей пользовательской форме. Один для ввода имени, а другой для ввода дохода.

Теперь я создаю немодальную форму пользователя, чтобы пользователь мог продолжать вставлять данные

Предположим, у меня уже есть список имен. Например: жениться, Джейми, Майкл

Можно ли установить этот список в качестве значения по умолчанию для имени TextBox? Например:

После нажатия кнопки пользовательская форма выскакивает и отображается следующим образом:

Name: Marry
Income: ""

После того, как я введу доход и нажму кнопку «ОК», пользовательская форма снова появится. На этот раз это выглядит так:

Name: Jamie
Income: ""

Если мой вопрос недостаточно ясен, пожалуйста, скажите мне, и я объясню его более подробно. Заранее спасибо.


Обновление:

Я добавляю свой код сюда, чтобы прояснить свой вопрос. Тем не менее, «история» моего кода немного отличается. Пользователь вставит идентификатор пользователя, значение бюджета и дату в форму пользователя. Затем макрос отфильтрует таблицу в листе "ALL_List".

Исходя из идентификатора и даты портфеля, после фильтрации в этой таблице останется только одна строка данных. Столбец Бюджет для этой строки данных должен быть пустым. Макрос должен автоматически вставить значение бюджета, записанное в пользовательской форме, в столбец бюджета.

Например, есть 5 идентификаторов и 5 бюджетных значений:

Дата / удостоверение личности / бюджет

29/06/2018/12541/336521

29/06/2018/4521/658882

29/06/2018/44359/4587996

29/06/2018/10223/148665

29/06/2018/74/658324

Итак, когда пользователь первый раз всплывает. Я надеюсь, что в TextBox идентификатора портфолио будет значение идентификатора по умолчанию "12541". После того как я введу дату и значение бюджета и нажму кнопку «Ввод», значение бюджета будет вставлено в столбец «Бюджет» на листе «ALL_List». Затем пользовательская форма снова всплывает. На этот раз значение по умолчанию для идентификатора будет 4521.

После того, как появится окончательный идентификатор по умолчанию (74), и я ввожу значение и нажимаю Enter, я надеюсь, что пользовательская форма все еще будет всплывать, и на этот раз значение идентификатора портфолио TextBox будет пустым (поскольку может быть другой идентификатор, который пользователь хочет вставить.)

Надеюсь, мое описание понятно. Если есть какие-либо вопросы, пожалуйста, не стесняйтесь сообщить мне. Большое спасибо!

Sub Budget_Adjustment()

    Dim frm As New UserFormBudget
    frm.Show vbModeless

End Sub



Private Sub ButtonClose_Click()
    Unload Me
End Sub



Private Sub ButtonEnter_Click()
    InsertBudget
End Sub



Private Sub InsertBudget()

Dim UpdateDate As String
Dim PortfolioID, Budgetvalue As Long

    UpdateDate = TextBoxDate.Value
    PortfolioID = TextBoxID.Value
    Budgetvalue = TextBoxBedget.Value

    UpdateDate = CDate(UpdateDate)

    Sheets("ALL_List").Activate
    ActiveSheet.AutoFilterMode = False
    Range(Cells(1, 1), Cells(Cells(Rows.Count, 7).End(xlUp).row, 7)).AutoFilter Field:=1, Criteria1:=UpdateDate
    Range(Cells(1, 1), Cells(Cells(Rows.Count, 7).End(xlUp).row, 7)).AutoFilter Field:=3, Criteria1:=PortfolioID

    Cells(Cells(Rows.Count, "A").End(xlUp).row, "F").Value = Budgetvalue

    ActiveSheet.AutoFilterMode = False
    TextBoxID.Value = ""
    TextBoxBedget.Value = ""
    TextBoxID.SetFocus
End Sub

Private Sub TextBoxBedget_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        ButtonEnter_Click
    End If
End Sub



Private Sub UserForm_Activate()

    'Empty TextBoxID
     TextBoxID.Value = ""

    'Empty TextBoxBedget
     TextBoxBedget.Value = ""

     'Empty TextBoxDate
     TextBoxDate.Value = ""

     'Set Focus on NameTextBox
     TextBoxDate.SetFocus

End Sub

1 Ответ

0 голосов
/ 28 августа 2018

...

EDIT:

Немного отредактировал ваш код на основе предоставленной вами новой информации. Теперь вы просто вводите свои идентификаторы, которые вы хотите отредактировать, до того, как они будут внесены в лист "list".

Я добавил лист с именем «Список»:

enter image description here

Этот код попадает в область, когда вы щелкаете правой кнопкой мыши UserFormBudget> View Code:

Private Sub ButtonClose_Click()

    Dim lastListRow As Long

    With ThisWorkbook.Worksheets("List")
        lastListRow = .Cells(.Rows.Count, 1).End(xlUp).row
        .Range("A4:A" & lastListRow).Interior.ColorIndex = 0
    End With

    Unload Me

End Sub

Private Sub ButtonEnter_Click()

    InsertBudget

End Sub

Private Sub InsertBudget()

    Dim UpdateDate As String
    Dim PortfolioID As Long
    Dim Budgetvalue As Long
    Dim lastListRow As Long
    Dim row As Long

    UpdateDate = TextBoxDate.Value
    PortfolioID = TextBoxID.Value
    Budgetvalue = TextBoxBedget.Value

    If Len(UpdateDate) > 0 Then
        UpdateDate = CDate(UpdateDate)
    Else
        MsgBox "Need to enter a date"
        Exit Sub
    End If

    With Worksheets("ALL_List")
        .Activate
        .AutoFilterMode = False
        .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 7).End(xlUp).row, 7)).AutoFilter Field:=1, Criteria1:=UpdateDate
        .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 7).End(xlUp).row, 7)).AutoFilter Field:=3, Criteria1:=PortfolioID
        .Cells(.Cells(.Rows.Count, "A").End(xlUp).row, "F").Value = Budgetvalue
        .AutoFilterMode = False
    End With

    With ThisWorkbook.Worksheets("List")
        lastListRow = .Cells(.Rows.Count, 1).End(xlUp).row

        TextBoxID.Value = ""
        For row = 5 To lastListRow
            If .Cells(row, "A").Interior.Color <> RGB(255, 255, 0) Then
                TextBoxID.Value = .Cells(row, "A").Value
                .Cells(row, "A").Interior.Color = RGB(255, 255, 0)
                Exit For
            End If
            If row = lastListRow Then
                TextBoxDate.Value = ""
            End If
        Next
    End With

    TextBoxBedget.Value = ""
    TextBoxID.SetFocus

End Sub

Private Sub TextBoxBedget_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    If KeyCode = 13 Then
        ButtonEnter_Click
    End If

End Sub

И добавьте этот код в модуль, поэтому щелкните правой кнопкой мыши проект и вставьте новый модуль, а затем вставьте:

Sub Budget_Adjustment()

    Dim frm As New UserFormBudget
    Dim lastListRow As Long

    With ThisWorkbook.Worksheets("List")
        lastListRow = .Cells(.Rows.Count, 1).End(xlUp).row

        If lastListRow = 3 Then
            frm.TextBoxDate.Value = ""
            frm.TextBoxID.Value = ""
            frm.TextBoxBedget.Value = ""
        Else
            frm.TextBoxID.Value = .Cells(4, "A").Value
            frm.TextBoxBedget.Value = .Cells(4, "B").Value
            .Cells(4, "A").Interior.Color = RGB(255, 255, 0)
        End If
    End With

    frm.TextBoxID.SetFocus
    frm.Show vbModeless


End Sub

Теперь просто щелкните правой кнопкой мыши на листе списка и назначьте ему макрос Budget_Adjustment

...