#excel #vba
#excel #vba
Вопрос:
У меня есть этот фрагмент кода, в котором я пытаюсь скопировать предыдущий столбец на основе строки в my Sheets("Input").Range("A2")
, затем ввод в ячейку Y1M7
Однако я получаю Overflow
сообщение об ошибке. Кто-нибудь может помочь?
Sub NewFind()
Dim nameColumn As Long
With Sheets("Load check data")
nameColumn = .Rows(1).Find(Sheets("Input").Range("A2"), .Cells(.Cells.Count), xlValues, xlWhole).Column
.Range(.Cells(2, nameColumn - 1), .Cells(k, nameColumn - 1)).Copy
End With
End Sub
Комментарии:
1. При использовании
Find
в диапазоне (.Rows(1)
в данном случае) указанный диапазонAfter
должен находиться в диапазонеFind
поиска. Ваш код пытается указать нижнюю правую ячейку на листе, которой явно нет в строке 1. Замените.Cells(.Cells.Count)
на.Rows(1).Cells(.Rows(1).Cells.Count)
2. Другие моменты: 1) вы должны присвоить Find переменной диапазона и проверить ее
Nothing
, прежде чем пытаться получить ее столбец. 2) Если бы вы на самом деле пытались получить нижнюю правую ячейку, которая вам понадобится.Cells(.Cells.CountLarge)
, поскольку поскольку.Cells.Count
для целого листа переполняется длинный3. Вы получаете ошибку переполнения, потому что возвращаемое значение
.Cells.Count
превышает ограничения дляLong
типа данных. Длинный тип данных max2,147,483,647
, но на листе есть17,179,869,184
ячейки. Если вам нужно вернуть это значение, используйтеCells.CountLarge