Как правильно переопределить массив?

Автор Al_Ex, 1 сентября 2017, 12:07

0 Пользователи и 1 гость просматривают эту тему.

Al_Ex

Всем привет!
Есть следующая задача: существует массив констант, заданный пользователем, например 1, 2, 3.
И есть еще одна константа, например 100500, которая должна поочередно замениться с каждым элементом этого массива, чтобы получился такой результат:


100500, 2, 3
1, 100500, 3
1, 2, 100500


Реализовано это с помощью такой конструкции:

       // в этом цикле формируем первый массив констант
       For i = 1 To gintCountOfArguments
           arrArguments(i) = Cells(5, Columns.Count).End(xlToLeft).Offset(0, i - gintCountOfArguments).Select
       Next i
       // а здесь в массив поочередно добавляем нашу константу
       For ii = 1 To gintCountOfArguments
           arrNewArguments = arrArguments
           arrNewArguments(ii) = 100500
           strFormulaValue = "=" & "(" & GetResult(arrNewArguments) & ")"


В Экселе этот код отрабатывает без проблем.
В Либре получается, что в строке

arrNewArguments = arrArguments

каждый раз присваивается измененный массив, а не исходный, и в результате получается такая картина:


100500, 2, 3
100500, 100500, 3
100500, 100500, 100500

Вопрос: как в Либре правильно переопределить массив, чтобы он каждый раз присваивал исходный массив констант?

rami

Цитата: Al_Ex от  1 сентября 2017, 10:07Вопрос: как в Либре правильно переопределить массив, чтобы он каждый раз присваивал исходный массив констант?
Вот так:
Sub Main
a=Array(1,2,3)               'исходный массив
For i=0 To UBound(a)
b=a                          'переменная "b" получает ссылку на массив "a", оба массива связаны по ссылке
ReDim Preserve b(UBound(a))  'переменная "b" переопределяется с сохранением данных, связь между "a" и "b" удаляется
b(i)=100500                  'элементу массива "b" присваивается новое значение, массив "a" не меняется
Print join(b)
Next
End Sub

Al_Ex