Защо рейнджа в новия шийт започва от втори ред втора колона до два реда + горната граница на масива?
Защо рейнджа в новия лист започва от втори ред втора колона до два реда + горната граница на масива? Та горната граница на масива е нула. Тогава се получава, че рейнджът е от втори ред, първа колона до втори ред първа колона. В същото време макросът работи правилно, значи аз не разбирам нещо.
Set rng = ActiveSheet.Range(Cells(2, 1), Cells(2 + UBound(array_names), 1)) Логично е да е : Set rng = ActiveSheet.Range(Cells(2, 1), Cells(2 + LBound(array_names), 1))
Както и защо i = LBound(array_names), логично е да i = UBound(array_names) и после i = i+1
Здравей, Цветелина. LBound е функция, която определя долната граница на масива, т.е. индексът на първия елемент на масива. По подразбиране първият елемент на масива има индекс 0. Горната граница на масива се определя с UBound, т.е. това е индексът на последния елемент в масива. Например, ако масивът има 5 елемента, Ubound=4 или както е в примера от урока: масивът има 10 елемента и затова Ubound=9. Диапазонът (обект Range) започва от втори ред първа колона (Cells(2,1)), а последната клетка в този диапазон има референция Cells(2 + UBound(array_names),1) ==> това означава следното: UBound(array_names) определя горната граница на масива, т.е. индексът на последния елемент в масива = 9. Така се определя референцията на последната клетка в диапазона 2+9 = 11 за реда, а колоната е 1. Да разгледаме твоето предложение: Set rng = ActiveSheet.Range(Cells(2, 1), Cells(2 +LBound(array_names), 1)) LBound=0, защото LBound определя долната граница на масива, т.е. индексът на първия елемент в масива, а той = 0. По тази логика обект Range има следната референция: LBound(array_names)=0 Set rng = ActiveSheet.Range(Cells(2, 1), Cells(2 +0, 1)). По същата логика i = LBound(array_names) --> LBound(array_names)=0, rng_cell.Value = array_names(i) което означава, че на първата клетка в диапазона (обект Range) се присвоява първият елемент от масива и т.н. Това с масивите наистина е малко объркващо отначало, но се надявам, че съм помогнала да го разбереш. Ако има нещо, което не е ясно, пиши.
Сега разбрах. Говоря английски и тълкувах Low Bound като долна граница = 9, а Upper Bound = 0, а то било обратното.
Пак Low Bound e долна граница, но се има предвид ниската граница, а не последната граница, затова е долна и е равна на 0.
Цветелина, радвам се, че успях да помогна. Не се притеснявай да питаш, когато нещо не ти е ясно!
За мен е новост работата с Excelq, но възможността за електронното обучение е прекрасна.