Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Присвоение одного массива, другому (Сan't assign to array) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Присвоение одного массива, другому (Сan't assign to array) (Макросы/Sub)
Присвоение одного массива, другому (Сan't assign to array)
Fidgy Дата: Пятница, 07.06.2019, 18:18 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 11 ±
Замечаний: 0% ±

Excel 2016
Подскажите пожалуйста как решить эту проблему

Нужно в процедуре выбрать один из двух массивов, потом произвести множество алгоритмов именно с этим массивом, изменив его
Пытался сделать это через третий массив, но выходит ошибка Сan't assign to array
Упрощённый пример кода:
[vba]
Код

Option Explicit
Dim ar1(1, 1) As Variant
Dim ar2(1, 1) As Variant

Sub test_ar()
ar1(1, 1) = 5
ar2(1, 1) = 10

test_arr2 1

MsgBox ar1(1, 1) & ar2(1, 1)
End Sub

Sub test_arr2(var As Byte)
Dim ar3() As Variant
Select Case var
    Case 1
    ar3 = ar1
    Case 2
    ar3 = ar2
End Select

ar3(1, 1) = ar3(1, 1) + 1

Select Case var
    Case 1
    ar1 = ar3
    Case 2
    ar2 = ar3
End Select
End Sub
[/vba]
 
Ответить
СообщениеПодскажите пожалуйста как решить эту проблему

Нужно в процедуре выбрать один из двух массивов, потом произвести множество алгоритмов именно с этим массивом, изменив его
Пытался сделать это через третий массив, но выходит ошибка Сan't assign to array
Упрощённый пример кода:
[vba]
Код

Option Explicit
Dim ar1(1, 1) As Variant
Dim ar2(1, 1) As Variant

Sub test_ar()
ar1(1, 1) = 5
ar2(1, 1) = 10

test_arr2 1

MsgBox ar1(1, 1) & ar2(1, 1)
End Sub

Sub test_arr2(var As Byte)
Dim ar3() As Variant
Select Case var
    Case 1
    ar3 = ar1
    Case 2
    ar3 = ar2
End Select

ar3(1, 1) = ar3(1, 1) + 1

Select Case var
    Case 1
    ar1 = ar3
    Case 2
    ar2 = ar3
End Select
End Sub
[/vba]

Автор - Fidgy
Дата добавления - 07.06.2019 в 18:18
Pelena Дата: Пятница, 07.06.2019, 19:35 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19167
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
Массивы обычно обрабатываются в цикле поэлементно.
Опишите задачу конкретнее, возможно, третий массив и не нужен


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеМассивы обычно обрабатываются в цикле поэлементно.
Опишите задачу конкретнее, возможно, третий массив и не нужен

Автор - Pelena
Дата добавления - 07.06.2019 в 19:35
doober Дата: Суббота, 08.06.2019, 09:28 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Так работает[vba]
Код
Dim ar1() As Variant
Dim ar2() As Variant

Sub test_ar()
    ReDim ar1(1, 1)
    ReDim ar2(1, 1)
    ar1(1, 1) = 5
    ar2(1, 1) = 10
    test_arr2 1
    MsgBox ar1(1, 1) & ar2(1, 1)
End Sub
[/vba]


 
Ответить
СообщениеТак работает[vba]
Код
Dim ar1() As Variant
Dim ar2() As Variant

Sub test_ar()
    ReDim ar1(1, 1)
    ReDim ar2(1, 1)
    ar1(1, 1) = 5
    ar2(1, 1) = 10
    test_arr2 1
    MsgBox ar1(1, 1) & ar2(1, 1)
End Sub
[/vba]

Автор - doober
Дата добавления - 08.06.2019 в 09:28
Fidgy Дата: Понедельник, 10.06.2019, 11:32 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 11 ±
Замечаний: 0% ±

Excel 2016
Pelena, ситуация в том, что у меня есть две таблице 10 на 10 в виде объектов UserForm
Данные об этих таблицах хранятся в двух массивах
Я предварительно выбираю с какой из двух таблиц буду работать и произвожу действие - на пример закрашиваю одну из ячеек и все соседние с ней
Данные о таблице №1 хранятся в массиве arr1(10, 10)
Данные о таблице №2 хранятся в массиве arr1(10, 10)

Далее говорю, что хочу закрасить ячейку по адресу 5, 3 и выбираю одну из двух таблиц

Пока нашел только вариант через дополнительную процедуру выбирать массив и затем передавать в процедуру обработки этот массив ByRef
[vba]
Код
Option Explicit
Dim ar1(1, 1) As Variant
Dim ar2(1, 1) As Variant

Sub test_ar()
ar1(1, 1) = 5
ar2(1, 1) = 10

test_arr2 1

MsgBox ar1(1, 1) & ar2(1, 1)
End Sub

Sub test_arr2(var As Byte)
Select Case var
    Case 1
    test_arr3 ar1
    Case 2
    test_arr3 ar2
End Select
End Sub

Sub test_arr3(ar3() as Variant)
ar3(1, 1) + 1
End Sub
[/vba]
 
Ответить
СообщениеPelena, ситуация в том, что у меня есть две таблице 10 на 10 в виде объектов UserForm
Данные об этих таблицах хранятся в двух массивах
Я предварительно выбираю с какой из двух таблиц буду работать и произвожу действие - на пример закрашиваю одну из ячеек и все соседние с ней
Данные о таблице №1 хранятся в массиве arr1(10, 10)
Данные о таблице №2 хранятся в массиве arr1(10, 10)

Далее говорю, что хочу закрасить ячейку по адресу 5, 3 и выбираю одну из двух таблиц

Пока нашел только вариант через дополнительную процедуру выбирать массив и затем передавать в процедуру обработки этот массив ByRef
[vba]
Код
Option Explicit
Dim ar1(1, 1) As Variant
Dim ar2(1, 1) As Variant

Sub test_ar()
ar1(1, 1) = 5
ar2(1, 1) = 10

test_arr2 1

MsgBox ar1(1, 1) & ar2(1, 1)
End Sub

Sub test_arr2(var As Byte)
Select Case var
    Case 1
    test_arr3 ar1
    Case 2
    test_arr3 ar2
End Select
End Sub

Sub test_arr3(ar3() as Variant)
ar3(1, 1) + 1
End Sub
[/vba]

Автор - Fidgy
Дата добавления - 10.06.2019 в 11:32
RAN Дата: Понедельник, 10.06.2019, 12:08 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ничёнепонимаю!
Зачем все это? Чем по рабоче-крестьянски не устраивает?
[vba]
Код
Sub qq()
    Dim ar1, ar2
    ar1 = [a1:j10].Value
    ar2 = [a11:j20].Value
    Select Case [o1]
    Case 1: test ar1: [a1].Resize(10, 10).Value = ar1
    Case 2: test ar2: [a11].Resize(10, 10).Value = ar2
    End Select
End Sub
Sub test(ar)
   ar(5, 5) = ar(5, 5) * 5
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНичёнепонимаю!
Зачем все это? Чем по рабоче-крестьянски не устраивает?
[vba]
Код
Sub qq()
    Dim ar1, ar2
    ar1 = [a1:j10].Value
    ar2 = [a11:j20].Value
    Select Case [o1]
    Case 1: test ar1: [a1].Resize(10, 10).Value = ar1
    Case 2: test ar2: [a11].Resize(10, 10).Value = ar2
    End Select
End Sub
Sub test(ar)
   ar(5, 5) = ar(5, 5) * 5
End Sub
[/vba]

Автор - RAN
Дата добавления - 10.06.2019 в 12:08
Fidgy Дата: Понедельник, 10.06.2019, 14:35 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 11 ±
Замечаний: 0% ±

Excel 2016
RAN, согласен, можно и так :)
Это уже издержки моего проекта, приходится создавать промежуточные сабы, иначе всё превращается в кашу и трудно контролировать
 
Ответить
СообщениеRAN, согласен, можно и так :)
Это уже издержки моего проекта, приходится создавать промежуточные сабы, иначе всё превращается в кашу и трудно контролировать

Автор - Fidgy
Дата добавления - 10.06.2019 в 14:35
InExSu Дата: Суббота, 15.06.2019, 01:12 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!
[vba]
Код
Option Explicit
Private ar1(1, 1) As Variant
Private ar2(1, 1) As Variant

Public Sub REName_()
    '
    Dim ar3() As Variant

    ar3 = Массив_Выбрать(1)

End Sub

Public Function Массив_Выбрать(ByVal var As Long) _
        As Variant()
    '
    If var = 1 Then Массив_Выбрать = ar1
    If var = 2 Then Массив_Выбрать = ar2

End Function
[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеПривет!
[vba]
Код
Option Explicit
Private ar1(1, 1) As Variant
Private ar2(1, 1) As Variant

Public Sub REName_()
    '
    Dim ar3() As Variant

    ar3 = Массив_Выбрать(1)

End Sub

Public Function Массив_Выбрать(ByVal var As Long) _
        As Variant()
    '
    If var = 1 Then Массив_Выбрать = ar1
    If var = 2 Then Массив_Выбрать = ar2

End Function
[/vba]

Автор - InExSu
Дата добавления - 15.06.2019 в 01:12
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Присвоение одного массива, другому (Сan't assign to array) (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!