Как исправить эту ошибку в моем коде, которая не позволяет мне обновлять другие столбцы в пользовательской форме Excel? - PullRequest
0 голосов
/ 25 января 2019

Здравствуйте, я работаю над этой пользовательской формой Excel уже месяц, и я почти закончил.Но в моем коде есть ошибка, которая не показывает никаких ошибок, но не позволяет мне обновить остальные столбцы.

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

И если я нажимаю на значение, скажем, нажимаю «dfldasfjasldk», значения его строк будут отображаться в комбинированных списках, позволяя пользователю редактировать информацию.

Изображение:

enter image description here

И когда я нажимаю «Обновить строку», единственным обновленным столбцом является среда.Это не сработало для остальных столбцов.

     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 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()

    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)

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

'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.Value
                Sheets("PRESTAGE DB").Cells(y, 3) = cmbHost.Value
                Sheets("PRESTAGE DB").Cells(y, 4) = cmbIP.Value
                Sheets("PRESTAGE DB").Cells(y, 5) = cmbAccessible.Value
                Sheets("PRESTAGE DB").Cells(y, 6) = cmbLast.Value
                Sheets("PRESTAGE DB").Cells(y, 7) = cmbConfirmation.Value
                Sheets("PRESTAGE DB").Cells(y, 8) = cmbProjects.Value
        Exit For
            End If
    Next y

    '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 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/8cDUORV

1 Ответ

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

Когда вы используете свойство RowSource для загрузки данных в ListBox, могут возникнуть некоторые проблемы и недостатки. На твоем месте я бы постарался этого избежать.

Имея это в виду, ознакомьтесь с этой демонстрацией, в которой я покажу, как выполнять основные операции (создание, чтение, обновление, удаление) с данными Excel, загруженными в список в форме пользователя.

Может быть, вы можете адаптировать его для удовлетворения ваших потребностей. Это не идеальное решение (например, отсутствие обработки ошибок и некоторый повторяющийся код), но оно должно указывать вам правильное направление.

Посетите этот репозиторий github и загрузите файл xlsm:

https://github.com/rdiazjimenez/excel-vba-userform-basic-listbox-demo

Также прочитайте файл readme.md, чтобы увидеть некоторые инструкции.


Вот несколько советов, которые следует учитывать при разработке решения, включающего загрузку данных Excel в список в пользовательской форме:

1) Попробуйте сохранить информацию Excel в структурированной таблице Excel (перейдите по этой ссылке, чтобы узнать больше: https://support.office.com/en-ie/article/create-and-format-tables-e81aa349-b006-4f8a-9806-5af9df0ac664)

2) Используйте Option Explicit вверху каждого модуля в VBA, чтобы иметь больше контроля над переменными, которые вы используете и создаете (перейдите по этой ссылке, чтобы узнать больше: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/option-explicit-statement)

3) Используйте описательные имена для элементов управления внутри пользовательской формы (перейдите по этой ссылке, чтобы узнать больше: https://rtmccormick.com/2015/11/23/vba-control-naming-conventions/)


Пожалуйста, отметьте этот ответ, если это помогло вам.

...