Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

20 Октябрь 2017, 13:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Как правильно переопределить массив?  (Прочитано 205 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Al_Ex
Новичок
*
Offline Offline

Сообщений: 32


« Стартовое сообщение: 1 Сентябрь 2017, 12:07 »

Всем привет!
Есть следующая задача: существует массив констант, заданный пользователем, например 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
Вопрос: как в Либре правильно переопределить массив, чтобы он каждый раз присваивал исходный массив констант?
« Последнее редактирование: 1 Сентябрь 2017, 12:10 от Al_Ex » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 231


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 1 Сентябрь 2017, 13:01 »

Вопрос: как в Либре правильно переопределить массив, чтобы он каждый раз присваивал исходный массив констант?
Вот так:
Код:
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
Новичок
*
Offline Offline

Сообщений: 32


« Ответ #2: 1 Сентябрь 2017, 13:14 »

Спасибо, работает!  Всё хорошо
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!