"... нужно добавить больше строк"
Обычно вы назначаете полный набор данных (d) свойству .List
вашегоListBox1
(вы решили назвать его arr2
).
Поскольку вы хотите увеличивать число содержащихся строк элементов с каждым событием CommandButton1_Click()
и сохранять все существующие данные, теоретически вам потребуется увеличить 1-е измерение 2-мерного массива - но это невозможно сделать с помощьюReDim Preserve
.
Чтобы преодолеть эту проблему, просто поменяйте местами размеры arr2
, определив таким образом 14 значений столбцов в его первом измерении и измерение «строка» в качестве 2-го.Элемент управления listbox предлагает свойство .Column
, которое вы можете использовать вместо обычного свойства .List
для обратной записи всего набора данных (без необходимости преднамеренно перемещать строки и столбцы).
Примечание
Поскольку вы изменили код в OP, я предполагаю, что tb0
, tb1
, ... соответствуют перечисленным элементам управления TextBox.( Пожалуйста, измените несколько странный порядок в массиве элементов управления arr1
для своих нужд. )
Пример кода
Option Explicit ' declaration head of userform code module
Dim arr2() ' make arr2 values disponible for each CommandButton1_Click event
Sub CommandButton1_Click()
' declare/assign variables
Dim arr1(), i As Long, nxt As Long
arr1 = Array(tb0, tb1, tb2, tb3, tb4, tb5, tb6, tb7, tb8, tb9, tb10, tb11, tb12, tb13) ' <~~ Change order to your needs
' define index of next row in listbox
nxt = Me.ListBox1.ListCount ' ListCount automatically counts upper bound + 1
' a) you can only increment an array's last dimension, so ...
' b) redefine arr2 with new elements in its 2nd dimension
ReDim Preserve arr2(0 To UBound(arr1), 0 To nxt)
' assign textbox and combobox values to arr2
For i = 0 To UBound(arr1)
arr2(i, nxt) = arr1(i)
Next i
' reassign arr2 to the listboxes .Column property (instead of the .List property)
ListBox1.Column = arr2
End Sub
Private Sub UserForm_Layout()
With Me.ListBox1
.ColumnCount = 14 ' define column count
.ColumnWidths = "50;50;50;50;50;50;50;50;50;50;50;50;50;50" ' <~~ change to your needs
' .Width = 50 * .ColumnCount + 16
End With
End Sub
Разрешите мнепримечание: я думаю, что это отвечает на ваш первоначальный вопрос.Вы найдете достаточно примеров, как переместить данные обратно на лист, читающий сайт StackOverflow, но для этого потребуется сформулировать новый вопрос с кодом, показывающим, что вы уже пробовали - см. Как создать минимальное, полное,и проверяемый пример .