Как обновить выбранную строку в списке? - PullRequest
0 голосов
/ 16 января 2019

Здравствуйте, я пытаюсь разработать пользовательскую форму, и это мой первый раз.

UI

У меня проблема с моими ComboBox и ListBox (почти не работает).

Видите ли, у меня ComboBox прямо над ListBox, и здесь я бы выбрал значение, и значения строк должны отображаться ОБА в ListBox и ComboBox.

Проблема 1: Значения отображаются только в комбинированных списках, но НЕ в ListBox.

Если я нажал кнопку «ПРОСМОТРЕТЬ ДАННЫЕ», все значения из электронной таблицы отобразятся в ListBox с 8 столбцами. Если щелкнуть строку в ListBox (очевидно, она будет выделена), она также будет отображена в комбинированных списках ниже.

Проблема 2: Всякий раз, когда я пытаюсь редактировать значения в ComboBox и нажимаю кнопку обновления, ничего не происходит. Это ничего не обновляет.

Я ищу ответы везде, но, кажется, не могу найти их.

     Private Sub btnDelete_Click()

        Dim a As Integer

            If MsgBox("Are you sure you want to delete this row?", vbYesNo + vbQuestion, "Yes") = vbYes Then

                For a = 1 To Range("A100000").End(xlUp).Row
                    If Cells(a, 1) = listHeader.List(listHeader.ListIndex) Then
                    Rows(a).Select
                    Selection.Delete
                End If
            Next a
        End If

    End Sub

Private Sub btnSearch_Click()

'IM THINKING ABOUT REMOVING THE SEARCH BUTTON BECAUSE THE COMBOBOX ITSELF CAN BE USED FOR SEARCHING THE ROW
'IT MAKES THE SEARCH BUTTON USELESS

'Dim x As Long
'Dim y As Long

'x = Sheets("PRESTAGE DB").Range("A" & Rows.Count).End(xlUp).Row
'For y = 2 To x

'If Sheets("PRESTAGE DB").Cells(y, 1).Text = cmbSearch.Value Then
    'cmbSchema.Text = Sheets("PRESTAGE DB").Cells(y, 1)
    'cmbEnvironment.Text = Sheets("PRESTAGE DB").Cells(y, 2)
    'cmbHost.Text = Sheets("PRESTAGE DB").Cells(y, 3)
    'cmbIP.Text = Sheets("PRESTAGE DB").Cells(y, 4)
    'cmbAccessible.Text = Sheets("PRESTAGE DB").Cells(y, 5)
    'cmbLast.Text = Sheets("PRESTAGE DB").Cells(y, 6)
    'cmbConfirmation.Text = Sheets("PRESTAGE DB").Cells(y, 7)
    'cmbProjects.Text = Sheets("PRESTAGE DB").Cells(y, 8)

'End If
'Next y

End Sub

    Private Sub btnView_Click()

        listHeader.RowSource = "A4:H200"

    End Sub

Private Sub cmbAdd_Click()
    Dim sheet As Worksheet
    Set sheet = ThisWorkbook.Sheets("PRESTAGE DB")

    nextrow = sheet.Cells(Rows.Count, 1).End(xlUp).Row + 1

    sheet.Cells(nextrow, 1) = Me.cmbSchema
    sheet.Cells(nextrow, 2) = Me.cmbEnvironment
    sheet.Cells(nextrow, 3) = Me.cmbHost
    sheet.Cells(nextrow, 4) = Me.cmbIP
    sheet.Cells(nextrow, 5) = Me.cmbAccessible
    sheet.Cells(nextrow, 6) = Me.cmbLast
    sheet.Cells(nextrow, 7) = Me.cmbConfirmation
    sheet.Cells(nextrow, 8) = Me.cmbProjects

    MsgBox "Data Added!"

End Sub

Private Sub cmbClearFields_Click()

    cmbSchema.Text = ""
    cmbEnvironment.Text = ""
    cmbHost.Text = ""
    cmbIP.Text = ""
    cmbAccessible.Text = ""
    cmbLast.Text = ""
    cmbConfirmation.Text = ""
    cmbProjects.Text = ""
    cmbSearch.Text = ""

End Sub

Private Sub cmbSearch_Change()

Dim x As Long
Dim y As Long

x = Sheets("PRESTAGE DB").Range("A" & Rows.Count).End(xlUp).Row
For y = 2 To x

If Sheets("PRESTAGE DB").Cells(y, 1).Text = cmbSearch.Value Then
    cmbSchema.Text = Sheets("PRESTAGE DB").Cells(y, 1)
    cmbEnvironment.Text = Sheets("PRESTAGE DB").Cells(y, 2)
    cmbHost.Text = Sheets("PRESTAGE DB").Cells(y, 3)
    cmbIP.Text = Sheets("PRESTAGE DB").Cells(y, 4)
    cmbAccessible.Text = Sheets("PRESTAGE DB").Cells(y, 5)
    cmbLast.Text = Sheets("PRESTAGE DB").Cells(y, 6)
    cmbConfirmation.Text = Sheets("PRESTAGE DB").Cells(y, 7)
    cmbProjects.Text = Sheets("PRESTAGE DB").Cells(y, 8)

End If
Next y

End Sub

    Private Sub cmbUpdate_Click()

    Dim x As Long
    Dim y As Long

    x = Sheets("PRESTAGE DB").Range("A" & Rows.Count).End(xlUp).Row
    For y = 2 To x
    If Sheets("PRESTAGE DB").Cells(y, 1).Text = cmbSchema.Value Then
    Sheets("PRESTAGE DB").Cells(y, 2) = cmbEnvironment
    Sheets("PRESTAGE DB").Cells(y, 3) = cmbHost
    Sheets("PRESTAGE DB").Cells(y, 4) = cmbIP
    Sheets("PRESTAGE DB").Cells(y, 5) = cmbAccessible
    Sheets("PRESTAGE DB").Cells(y, 6) = cmbLast
    Sheets("PRESTAGE DB").Cells(y, 7) = cmbConfirmation
    Sheets("PRESTAGE DB").Cells(y, 8) = cmbProjects

    End If
    Next y

    End Sub

    Private Sub CommandButton5_Click()
        listHeader.RowSource = ""

    End Sub


Private Sub CommandButton7_Click()

End Sub

    Private Sub listHeader_Click()

        cmbSchema.Value = UserForm1.listHeader.Column(0)
        cmbEnvironment.Value = UserForm1.listHeader.Column(1)
        cmbHost.Value = UserForm1.listHeader.Column(2)
        cmbIP.Value = UserForm1.listHeader.Column(3)
        cmbAccessible.Value = UserForm1.listHeader.Column(4)
        cmbLast.Value = UserForm1.listHeader.Column(5)
        cmbConfirmation.Value = UserForm1.listHeader.Column(6)
        cmbProjects.Value = UserForm1.listHeader.Column(7)

    End Sub


    Private Sub UserForm_Initialize()

        cmbSearch.List = Sheets("PRESTAGE DB").Range("A4:A10000").Value

    End Sub

файл: https://jmp.sh/cZj8e4q

Ответы [ 2 ]

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

Для Задача2

Используйте .Value, чтобы получить значение из поля, а затем установите значение для электронной таблицы -> cmbEnvironment.Value

Private Sub cmbUpdate_Click()

    Dim x As Long
    Dim y As Long

    x = Sheets("PRESTAGEDB").Range("A" & Rows.Count).End(xlUp).Row
    For y = 2 To x
        If Sheets("PRESTAGEDB").Cells(y, 1).Text = cmbSchema.Value Then
            Sheets("PRESTAGEDB").Cells(y, 2) = cmbEnvironment.Value
            Sheets("PRESTAGEDB").Cells(y, 3) = cmbHost.Value
            Sheets("PRESTAGEDB").Cells(y, 4) = cmbIP.Value
            Sheets("PRESTAGEDB").Cells(y, 5) = cmbAccessible.Value
            Sheets("PRESTAGEDB").Cells(y, 6) = cmbLast.Value
            Sheets("PRESTAGEDB").Cells(y, 7) = cmbConfirmation.Value
            Sheets("PRESTAGEDB").Cells(y, 8) = cmbProjects.Value
            Exit For
        End If
    Next y
End Sub

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

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

Используйте приведенный ниже код для Задача1

Используется событие Изменить для комбинированного списка, поэтому, если пользователь изменяет какое-либо значение, список и поле со списком будут заполняться на основе значения, выбранного в поле со списком.

Private Sub ComboBox1_Change()
    x = Sheets("PRESTAGEDB").Range("A" & Rows.Count).End(xlUp).Row
    For y = 2 To x
        If Sheets("PRESTAGEDB").Cells(y, 1).Text = ComboBox1.Value Then
            cmbSchema.Text = Sheets("PRESTAGEDB").Cells(y, 1)
            cmbEnvironment.Text = Sheets("PRESTAGEDB").Cells(y, 2)
            cmbHost.Text = Sheets("PRESTAGEDB").Cells(y, 3)
            cmbIP.Text = Sheets("PRESTAGEDB").Cells(y, 4)
            cmbAccessible.Text = Sheets("PRESTAGEDB").Cells(y, 5)
            cmbLast.Text = Sheets("PRESTAGEDB").Cells(y, 6)
            cmbConfirmation.Text = Sheets("PRESTAGEDB").Cells(y, 7)
            cmbProjects.Text = Sheets("PRESTAGEDB").Cells(y, 8)

            UserForm1.ListBox1.RowSource = "A" + CStr(y) + ": H" + CStr(y)
            Exit For
        End If
    Next y
End Sub

Пожалуйста, примите, если решите вашу проблему

...