Добавление нового элемента с помощью VBA - PullRequest
0 голосов
/ 04 августа 2020

Здравствуйте, у меня есть список данных в моем файле Excel, я хочу добавить новые элементы в этот список с помощью пользовательской формы. Я написал приведенный ниже код, он должен добавить данные в столбец B, один после последних данных в последней строке. Проблема в том, что каждый раз, когда я добавляю новые данные, мой код удаляет старые данные и добавляет новые. Итак, если у меня есть данные в столбце B, строка 3, он удаляет то, что находится в строке 3 (последняя строка), и добавляет то, что я только что ввел в эту строку:

Private Sub CommandButton1_Click()
    Dim ws_liste As Worksheet
    Dim fin_liste As Integer

    Set ws_liste = ActiveWorkbook.Worksheets("Liste_Lame_" & Me.ComboBox_Modele.Value)
    fin_liste = ws_liste.Range("A" & Rows.Column).End(xlUp).Row
    'fin_liste = ws_liste.Range("A65533").End(xlUp).Row
    ws_liste.Cells(fin_liste + 1, 2) = Me.ComboBox_Num.Value & "-" & Me.TextBox_Mois.Value & "-" & Me.TextBox_Annee.Value & "-" & Me.ComboBox_Modele.Value & "-" & Me.ComboBox_Const.Value
    Unload Me
End Sub

Где моя ошибка? Спасибо

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Я не понимаю, почему вы используете этот код

fin_liste = ws_liste.Range("A" & Rows.Column).End(xlUp).Row

Он всегда дает вам значение «1» и никогда не меняется, поэтому новые данные удаляют старые.

Я дам вам два решения, выберите то, что вы хотите.

Сначала возьмите одну ячейку, чтобы сохранить значение из fin_liste как целое (например, я выбираю ячейку «D1»). Затем добавьте "i" для новой переменной как целое число. Вот код.

Private Sub CommandButton1_Click()
    Dim ws_liste As Worksheet
    Dim fin_liste, i As Integer

    Set ws_liste = ActiveWorkbook.Worksheets("Liste_Lame_" & Me.ComboBox_Modele.Value)
    fin_liste = ws_liste.Range("A" & Rows.Column).End(xlUp).Row
    i = Range("D1").Value + fin_liste
    'fin_liste = ws_liste.Range("A65533").End(xlUp).Row
    ws_liste.Cells(i + 1, 2) = Me.ComboBox_Num.Value & "-" & Me.TextBox_Mois.Value & "-" & Me.TextBox_Annee.Value & "-" & Me.ComboBox_Modele.Value & "-" & Me.ComboBox_Const.Value
    Range("D1").Value = i

    Unload Me
End Sub

Но есть риск, что если значение в «D1» изменилось, это испортит ваши данные.

Второй вариант.

Private Sub CommandButton1_Click()

    Dim fin_liste As Range

    Set fin_liste = ThisWorkbook.Worksheets("Liste_Lame_" & Me.ComboBox_Modele.Value).Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
    'fin_liste = ws_liste.Range("A65533").End(xlUp).Row
    fin_liste = Me.ComboBox_Num.Value & "-" & Me.TextBox_Mois.Value & "-" & Me.TextBox_Annee.Value & "-" & Me.ComboBox_Modele.Value & "-" & Me.ComboBox_Const.Value

    Unload Me
End Sub
0 голосов
/ 04 августа 2020

ws_liste.Range("A" & Rows.Column).End(xlUp).Row будет оценивать первую строку в диапазоне из-за параметра xlUp.

Поскольку вы добавляете единицу к индексу строки в следующей строке (ws_liste.Cells(fin_liste + 1, 2)), я предполагая, что вы пытаетесь обратиться к последней строке диапазона. Вы можете добиться этого, используя xlDown вместо xlUp.

fin_liste = ws_liste.Range("A1").End(xlDown).Row

Изменить: как отметил SJR, если в столбце A нет данных, использование xlDown на A1 не найдет последний строка данных, а вместо нее следующая непустая ячейка в столбце A. Было бы правильно использовать xlDown в столбце, содержащем последнюю строку данных.

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