Я пытался сжать это для вас. Чтобы избежать специальной вставки, вы просто назначаете значения одного диапазона другому. Чтобы избежать выбора, вы просто применяете то, что использовали бы для выбора в полностью определенном диапазоне. Поскольку вы знаете свои границы, достаточно легко определить, какой диапазон должен быть на новом листе для размещения всех значений.
Если вам хочется каждый раз писать рабочую книгу и лист, это немного хлопотно, вы можете попробовать использовать с блоками, или вы можете создать новую переменную, которая будет либо рабочим листом, либо рабочей книгой, и установить его как нужный вам объект. , Примером этого будет
Dim TopTen As Worksheet
Dim NegTrend As Workbook
Set TopTen = Workbooks("Negative Trend 2017.xls").Worksheets("Top Ten")
Set NegTrend = Workbooks("Negative Trend 2017.xls")
LastRow = TopTen.Cells(Rows.Count, "B").End(xlUp).Row + 1
Переменная теперь является рабочим листом, и вы можете вызывать те же свойства, которые вы обычно вызываете с листом, например Range, Cells
и т. Д., Но с меньшим набором текста и сохранением его полного определения.
Вот ваш код, сжатый и реализующий блоки with, о которых я упоминал выше.
Sub test()
Dim LastRow As Long
With Workbooks("Negative Trend 2017.xls").Worksheets("Top Ten")
LastRow = .Cells(Rows.Count, "B").End(xlUp).Row + 1
.Range("B" & LastRow & ":M" & LastRow + 9).Value = _
Workbooks("Negative Report Macro Template").Worksheets("Qry_Total").Range("A2:L11").Value
End With
With Workbooks("Negative Report Macro Template")
.Sheets("Qry_Summary").Name = "Summary"
.Sheets("Qry_Total").Name = "Detail"
End With
End Sub