Выберите и скопируйте диапазон ячеек

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь скопировать все непустые записи в столбец и вставить их куда-нибудь.

Приведенный ниже код работает нормально, пока у меня не возникнет ситуация, когда у меня есть только одна запись, и она скопирует весь столбец ( A2 в A1048576 ). Поэтому, когда он попытался вставить значения в новую область, у меня возникла ошибка, потому что строк недостаточно.

Может кто-нибудь, пожалуйста, помогите? Я не ожидаю увидеть более 2000 записей, я думаю, что настоящая проблема здесь заключается только в ситуации, когда у меня есть только одна запись, и я хотел скопировать эту запись, а не весь столбец.

 Sheets("FinalListofContracts").Select
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
  

Ответ №1:

Я думаю, что лучше посчитать последнюю строку no и указать диапазон для копирования листа. Вот функция, которая возвращает количество строк и просто копирует в соответствии с возвращенным количеством строк.

 Function RowCounter(sSheetName As String, sRangeCol As String) As Long
   Dim rowCnt As Long
    rowCnt = 0
    Sheets(sSheetName).Select
    rowCnt = ActiveSheet.Cells(Rows.Count, Range(sRangeCol).Column).End(xlUp).Row
    RowCounter = rowCnt
End Function

Sub copyRow()
    Dim aRange As String
     rowCnt = RowCounter("FinalListofContracts", "A1")
     aRange = "A1:A" amp; rowCnt     
     ActiveWorkbook.Sheets("FinalListofContracts").Range(aRange).copy

End Sub
  

Ответ №2:

Прежде чем расширять выделение до полного диапазона, мы можем проверить, будет ли этот полный диапазон содержать более 2000 строк. Или, скорее, мы можем выбрать диапазон, только если в нем меньше 2000 строк. Полный код:

 Sheets("FinalListofContracts").Select
Range("A2").Select
If Range(Selection, Selection.End(xlDown)).Rows.Count < 2000 Then
    Range(Selection, Selection.End(xlDown)).Select
End If
Selection.Copy
  

Очевидно, что вы могли бы увеличить этот 2000 …. где-то между 2000 (если это всегда ваш максимум) и 65000 (при использовании старого формата файла) должен дать желаемый результат.