Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Создание массива со стилем ссылок R1C1., не работает макрос
 
Код
Sub Result_rpt()
Dim A()

'A = Sheets("Лист2").Range("C16:C579").Value
A = Sheets("Лист2").Range(Cells(16, 3), Cells(579, 3)).Value
Sheets("результат").Range("B1").Resize(564, 1) = A

End Sub
макрос не работает. выдает Run-time error '1004'.

но вот такой макрос работает
Код
Sub Result_rpt()
Dim A()

A = Sheets("Лист2").Range("C16:C579").Value
'A = Sheets("Лист2").Range(Cells(16, 3), Cells(579, 3)).Value
Sheets("результат").Range("B1").Resize(564, 1) = A

End Sub
вроде бы
Код
Range("C16:C579") равно Range(Cells(16, 3), Cells(579, 3))
 
А если так?
Код
Sheets("результат").Range("B1").Resize(564, 1).value = A

 
Так же не работает. Проблема в том, что если определять и выводить массив на том же листе,но в другом месте все работает. А если я определяю массив на одном листе ("Лист2") и пытаюсь вывести на другой ("результат"), то не работает
Код
A = Sheets("результат").Range(Cells(1, 1), Cells(12, 1)).Value 
Sheets("результат").Range("B1").Resize(12, 1) = A
Изменено: konstantan - 17 Апр 2018 07:50:18
 
У меня Excel попроще и нет листов с такими названиями, да и столько строк нет )) Попробовал:
Код
Sub qqq()
Dim A()
    A = Range(Cells(1, 2), Cells(5, 2)).Value
    Sheets("Лист2").Range("B1").Resize(5, 1).Value = A
End Sub


Всё сработало.
 
Код
Sub Result_rpt()
'Dim A()
 
'A = Sheets("Лист2").Range("C16:C579").Value
With Sheets("Лист2")
A = .Range(.Cells(16, 3), .Cells(579, 3))
End With
Sheets("результат").Range("B1").Resize(564, 1) = A
 
End Sub

Cells у вас ссылались на активный лист, а это не корректно.
 
оказывается если я находясь на "листе2" запускаю макрос он работает, если запускаю макрос находясь на другом листе не работает.  
 
konstantan, предупреждать нужно, что берёте диапазон не с активного листа ))
В моём #4 разговор про активный.
 
Цитата
БМВ написал:
Код ? 12345678910Sub Result_rpt()'Dim A()  'A = Sheets("Лист2").Range("C16:C579").ValueWith Sheets("Лист2")A = .Range(.Cells(16, 3), .Cells(579, 3))End WithSheets("результат").Range("B1").Resize(564, 1) = A  End SubCells у вас ссылались на активный лист, а это не корректно.
этот код почему то тоже на работает. надо видимо как то сделать лист активным, чтобы с него формировался массив)
 
Попробуйте добавить value:
Код
A = .Range(.Cells(16, 3), .Cells(579, 3)).value

 
И не цитируйте без необходимости.
 
Спасибо! В конечном итоге заработало. Видимо секрет в использовании With... End with. Вот работающий код.
Код
Sub Result_rpt1()
Dim A()
  
With Sheets("Лист2")
A = .Range(.Cells(16, 3), .Cells(579, 3)).Value
End With
Sheets("результат").Range("B1").Resize(564, 1) = A
  
End Sub
Изменено: konstantan - 17 Апр 2018 08:30:49
 
Цитата
konstantan написал: Видимо секрет в использовании With... End with.
Это не 'секрет', это инструмент. Все тоже самое можно сделать так, возможно так будет понятнее
Без явного указания листа, диапазоны/ячейки берутся с АКТИВНОГО, на момент выполнения макроса, листа
Код
Sub Result_rpt1()
Dim A()
    A = Sheets("Лист2").Range(Sheets("Лист2").Cells(16, 3), Sheets("Лист2").Cells(579, 3)).Value
    Sheets("результат").Range("B1").Resize(564, 1) = A
End Sub

 
Согласие есть продукт при полном непротивлении сторон.
 
konstantan, для проверки смотрите, в окне Locals, что там у Вас с массивом.
 
Вот читаю и думаю, при чем тут такое название темы?

Sanja, приветствую и прошу простить за вторжение в макро мир ;-)
 
Доброе утро Михаил  :)  
Согласие есть продукт при полном непротивлении сторон.
 
По названию: в первом приближении верно - не А1 ))
Страницы: 1
Читают тему (гостей: 1)