Задача: в существующий массив дополнять необходимое кол-во элементов в зависимости от введенного числа строк заказа: например пользователь вводит в текстовое поле 2, после чего должен появиться следующий набор:cellMappings = Array( _
Array(2, 2, 2), Array(3, 2, 4), _
Array(2, 5, 2), Array(3, 5, 4), _
Array(2, 3, 1), Array(3, 3, 3) _
)
если ввести 1(при следующем запуске) то должно появиться следующее
cellMappings = Array( _
Array(2, 2, 2), _
Array(2, 5, 2), _
Array(2, 3, 1) _
)
В файле order - я сгенерировал такие строки при помощи питона, но выяснилось, что не очень удобно их вставлять когда много строк, поэтому решил сделать автоматическую генерацию и масштабирование массива
Код на VBA word:
Спойлер
Sub Gen()
Dim numRows As Integer
Dim cellMappings As Variant
Dim i As Integer, j As Integer
Dim newOrderArrays() As String
' изначальный массив
cellMappings = Array( _
Array(2, 2, 2), Array(3, 2, 4), _
Array(2, 5, 2), Array(3, 5, 4), _
Array(2, 3, 1), Array(3, 3, 3) _
)
numRows = InputBox("Введите количество строк заказа:", "Количество строк заказа") ' запрос количества строк от пользователя
If Not IsNumeric(numRows) Then ' проверяем, является ли вводимое значение числом
MsgBox "Введено не число.", vbCritical
Exit Sub
End If
numRows = CInt(numRows) ' строка в целое число
'генерация новых строк заказа
ReDim newOrderArrays(0 To numRows * 3 - 1)
Dim index As Integer
index = 0
For i = 1 To numRows
newOrderArrays(index) = "Array(" & (i + 1) & ", 2, " & (2 * i) & ")"
index = index + 1
newOrderArrays(index) = "Array(" & (i + 1) & ", 5, " & (2 * i) & ")"
index = index + 1
newOrderArrays(index) = "Array(" & (i + 1) & ", 3, " & (2 * i - 1) & ")"
index = index + 1
If i < numRows Then
newOrderArrays(index) = "_" 'добавляем разделитель
index = index + 1
End If
Next i
If numRows < UBound(cellMappings) + 1 Then 'обновление cellMappings
Dim newCellMappings() As Variant 'ббновляем существующий массив, если количество меньше
ReDim newCellMappings(0 To (numRows * 3) - 1)
For i = 0 To (numRows * 3) - 1 'копируем элементы в новый массив
newCellMappings(i) = newOrderArrays(i)
Next i
cellMappings = newCellMappings 'устанавливаем новое значение для cellMappings
Else
cellMappings = newOrderArrays 'если больше или равно, просто запишем новые значения
End If
Dim result As String ' вывод результата
result = "Новый массив строк заказов:" & vbCrLf
For i = LBound(cellMappings) To UBound(cellMappings)
result = result & cellMappings(i) & vbCrLf
Next i
MsgBox result, vbInformation, "Результат" 'оказать результат
End Sub
Ошибка: если вводить 2,3,4 и тд строк заказа происходит выход за границы, есть возможность это пофиксить?
Да, я понял.
Из текста нельзя сделать реальный массив. В VBA массив можно только явно записать в код макроса.
Если вы создадите текст, в котором будет слово Array, этот текст затем вы не сможете превратить в массив.
большое спасибо за помощь, разобрался с вопросом, все заработало как надо.