Если я вас правильно понимаю, вы хотели бы иметь динамический способ выделить все ячейки, которые имеют значения на листе, и скопировать в другую «основную рабочую книгу».Вот как я делал это в прошлом.
Sub SelectActualUsedRange()
Dim FirstCell As Range, LastCell As Range
Set LastCell = Cells(Cells.Find(What:="*", SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _
Cells.Find(What:="*", SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Column)
Set FirstCell = Cells(Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlRows, _
SearchDirection:=xlNext, LookIn:=xlValues).Row, _
Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, LookIn:=xlValues).Column)
Range(FirstCell, LastCell).Select
End Sub
Вместо жесткого кодирования диапазона в коде, вы можете использовать эту маленькую функцию, чтобы получить фактический используемый диапазон.Надеюсь, что это отвечает на ваш вопрос.