Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Ваша проблема в том, что поскольку ссылки Cell
внутри Range
не соответствуют критериям, они ссылаются на значение по умолчанию ActiveSheet
. Таким образом, ваш код на самом деле говорит
Sheets("Temp").Range(ActiveSheet.Cells(1), ActiveSheet.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial
Вот улучшенная версия
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Temp")
Set sh2 = ActiveWorkbook.Sheets("Overview")
With sh1
.Range(.Cells(1,1), .Cells(1,1).End(xlDown)).Copy
End With
sh2.Range("C40").PasteSpecial
Я сам столкнулся с такой проблемой: я пытался выполнить поиск по отдельному листу, чтобы узнать, соответствует ли цвет элемента ячейке цвета ячейки в списке и возвращает строковое значение: если вы используете .Cells ( строка, столбец), вам нужно только это: Листы («имя листа»). Ячейки (строка, столбец) для ссылки на этот диапазон ячеек.
Я перебирал блок из 500 ячеек, и он работает на удивление быстро для меня.
Я не пробовал это с помощью .Copy, но я бы предположил, что он будет работать одинаково.
Это будет делать, я не люблю использовать (xlDown) в случае, если ячейка пуста.
Dim lRow As Long
lRow = Sheets("Temp").Cells(Cells.Rows.Count, "A").End(xlUp).Row
With Sheets("Temp")
.Range("A1:A" & lRow).Copy Sheets("Overview").Range("C40")
End With
Или если вы хотите просто использовать столбцы ...
Sheets("Temp").Columns(1).SpecialCells(xlCellTypeConstants).Copy Destination:=Sheets("Overview").Range("C40")