Страницы: 1
RSS
Сосчитывание данных с листа в массив
 
Преамбула:)  
Начал использовать запись диапазона в массив  
arrData = Range(Cells(1, 1), Cells(LastRow, 1))  
Пока попадались задачи, что макрос явно запускается с заданного активного листа и ни каких проблем с переносом значений в массив и выгрузкой из массива небыло.  
Но вот столкнулся с задачей что макрос может быть вызван "из любого" места. Активировать принудительно лист не хочется, перебирать по ячейке, можно но:(  
Вопрос! Как можно сосчитать данные в массив с неактивного листа. У меня идет ошибка 13 когда я прописываю Sheets("name").Range("A1:A" & LastRow)  
В общем нужно корректно сосчитывать и вносить данные из/в ячеки /массив
 
А так не сработает?  
With  Sheets("name")  
arrData = Range(.Cells(1, 1), .Cells(LastRow, 1))  
end with
 
Только не смейтесь  
В творческом порыве оказывается поставил лишнюю точку перед .Range, т.е. выглядело так:)  
arrData = .Range(.Cells(1, 1), .Cells(LastRow, 1))  
Спасибо!
 
Так работает с неактивным листом:  
MArr = Sheets("Лист1").[A1:G17]
и так:  
MArr = Sheets("Лист1").Range("A1:G17")  
Можно конкатенацией с LastRow.
Я сам - дурнее всякого примера! ...
 
{quote}{login=Igor67}{date=23.07.2010 11:05}{thema=}{post}Только не смейтесь  
В творческом порыве оказывается поставил лишнюю точку перед .Range, т.е. выглядело так:)  
arrData = .Range(.Cells(1, 1), .Cells(LastRow, 1))  
Спасибо!{/post}{/quote}  
У меня так:  
MArr = Sheets("Лист1").Range(Cells(1, 1), Cells(17, 7)) не работает с неактивным.  
Ошибка 1004
Я сам - дурнее всякого примера! ...
 
Сергей, использовал    
With Sheets("name")  
Обычно когда больше 2 раз надо писать имя листа лучшее с With  
 
А так?  
MArr = Range(Sheets("Лист1").Cells(1, 1), Sheets("Лист1").Cells(17, 7))
 
Игорь, я не помню ситуацию, но у меня на точку перед Range не ругался и работало правильно. Не замечал разницы.
 
{quote}{login=KuklP}{date=23.07.2010 11:09}{thema=Re: }{post}{quote}{login=Igor67}{date=23.07.2010 11:05}{thema=}{post}Только не смейтесь  
В творческом порыве оказывается поставил лишнюю точку перед .Range, т.е. выглядело так:)  
arrData = .Range(.Cells(1, 1), .Cells(LastRow, 1))  
Спасибо!{/post}{/quote}  
У меня так:  
MArr = Sheets("Лист1").Range(Cells(1, 1), Cells(17, 7)) не работает с неактивным.  
Ошибка 1004{/post}{/quote}  
Все от того, что Sheets("Лист1").Range(...) на неактивном листе состоит из Cells(...) на активном. По умолчанию, неквалифицированные Cells() в модуле листа принадлежат данному листу, во всех остальных случаях - активному листу.  
Т.е. надо делать как показал Юрий или прописывать лист для каждого из объектов Cells()
KL
 
А у меня ругается, и все не по русски:)  
ЗЫ потом можно и удалить этот файл. Графику не умею обрабатывать и жать.
Страницы: 1
Наверх