Есть макрос в котором массивы задаются диапазонами Excel. Например: [vba]
Код
arrTemp = Range("A1:C5").value
[/vba] Тут всё ок. Массив получается двумерный. В данном случае arrTemp (1 to 5, 1 to 3) Можно задать например и один столбец: [vba]
Код
arrTemp = Range("A1:A5").value
[/vba] Массив опять будет двумерным (правда уже не так понятно почему). В окне Locals мы увидим arrTemp Variant(1 to 5, 1 to 1). Допускаю что это просто такая запись одномерного массива. Не суть важно. Хотя если попытаться посчитать размерность массива (примеров функций в интернете много) то размерность будет 2. Допускаю что функции написаны не верно и не учитывают подобную запись.
Но вот когда массив уже задается диапазоном из одной ячейки появляется ошибка о не соответствии типов. Как её победить? Спотыкается если вдруг запись окажется вида: [vba]
Код
arrTemp = Range("A1").value
[/vba]
В макросе есть необходимость в массив запихивать и много ячеек сразу и одну. PS диапазоны задаются пользователем через Application.Inputbox
Есть макрос в котором массивы задаются диапазонами Excel. Например: [vba]
Код
arrTemp = Range("A1:C5").value
[/vba] Тут всё ок. Массив получается двумерный. В данном случае arrTemp (1 to 5, 1 to 3) Можно задать например и один столбец: [vba]
Код
arrTemp = Range("A1:A5").value
[/vba] Массив опять будет двумерным (правда уже не так понятно почему). В окне Locals мы увидим arrTemp Variant(1 to 5, 1 to 1). Допускаю что это просто такая запись одномерного массива. Не суть важно. Хотя если попытаться посчитать размерность массива (примеров функций в интернете много) то размерность будет 2. Допускаю что функции написаны не верно и не учитывают подобную запись.
Но вот когда массив уже задается диапазоном из одной ячейки появляется ошибка о не соответствии типов. Как её победить? Спотыкается если вдруг запись окажется вида: [vba]
Код
arrTemp = Range("A1").value
[/vba]
В макросе есть необходимость в массив запихивать и много ячеек сразу и одну. PS диапазоны задаются пользователем через Application.Inputboxfairylive
Сообщение отредактировал fairylive - Суббота, 05.11.2016, 22:37
Массив опять будет двумерным (правда уже не так понятно почему).
Одномерный массив нельзя записать на лист столбиком, одномерный массив будет записываться в строчку. Поэтому используется двумерный массив с одним столбцом.
По такому принципу: проверяете, сколько ячеек в диапазоне, если одна ячейка, то одно действие, если несколько ячеек, то другое действие. [vba]
Код
Sub Мой_макрос()
Dim arr()
If Range("A1").Cells.Count = 1 Then ReDim arr(1 To 1, 1 To 1) arr(1, 1) = Range("A1").Value Else arr() = Range("A1:A2").Value End If
Массив опять будет двумерным (правда уже не так понятно почему).
Одномерный массив нельзя записать на лист столбиком, одномерный массив будет записываться в строчку. Поэтому используется двумерный массив с одним столбцом.Karataev
Сообщение отредактировал Karataev - Суббота, 05.11.2016, 21:20