Вот несколько вещей, на которые вы можете посмотреть ...
- ВСЕГДА используйте
Option Explicit
.См. здесь для объяснения. - Когда вы выполняете какое-либо действие, такое как копирование данных, очень полезно очень четко определить источник и место назначения данных.Это включает в себя определение того, в какие данные
Workbook
будут отправлены данные.Вы поблагодарите меня позже за создание этой привычки сейчас.
Как пример:
Dim srcWB As Workbook
Dim dstWB As Workbook
Set srcWB = ThisWorkbook
Set dstWB = ThisWorkbook
Dim srcWS As Worksheet
Dim dstWS As Worksheet
Set srcWS = srcWB.Sheets("Sheet1") ' <--- you didn't specify this in your code
Set dstWS = dstWB.Sheets("Buyer Trend Metrics")
Когда вы выполняете одни и те же (или очень похожие) действия снова и снова, идеальная ситуация - создать отдельную функцию, которая будет выполнять действие за вас.Когда вы нарушаете этот раздел кода, он называется «функциональная изоляция».Это означает, что если у вас есть проблема, которую нужно исправить, вам нужно исправить ее только в одном месте, вместо того, чтобы находить все разные места в вашем коде, которые делают одно и то же.
В вашем случае вывыполняют копирование из одного диапазона ячеек в другой диапазон ячеек.Таким образом, разбивка этого на отдельную подпрограмму выглядит следующим образом:
Private Sub CopyMyData(ByRef fromData As Range, ByRef toData As Range)
Dim lastrow As Long
With toData.Parent
lastrow = .Cells(.Rows.Count, toData.Column).End(xlUp).Row
End With
fromData.Copy
toData.Cells(lastrow).PasteSpecial Paste:=xlPasteValues
End Sub
Обратите внимание, как я использую имена переменных, которые описывают, что делает код (fromData
и toData
).Это проясняет, что происходит.
Соберите все вместе, и ваш код будет выглядеть примерно так:
Option Explicit
Public Sub StartCopying()
Dim srcWB As Workbook
Dim dstWB As Workbook
Set srcWB = ThisWorkbook
Set dstWB = ThisWorkbook
Dim srcWS As Worksheet
Dim dstWS As Worksheet
Set srcWS = srcWB.Sheets("Sheet1") ' <--- you didn't specify this in your code
Set dstWS = dstWB.Sheets("Buyer Trend Metrics")
CopyMyData fromData:=srcWS.Range("B58"), toData:=dstWS.Range("J:J")
CopyMyData fromData:=srcWS.Range("B61:H61"), toData:=dstWS.Range("K:K")
CopyMyData fromData:=srcWS.Range("B58"), toData:=dstWS.Range("S:S")
CopyMyData fromData:=srcWS.Range("B61:H62"), toData:=dstWS.Range("T:T")
End Sub
Private Sub CopyMyData(ByRef fromData As Range, ByRef toData As Range)
Dim lastrow As Long
With toData.Parent
lastrow = .Cells(.Rows.Count, toData.Column).End(xlUp).Row
End With
fromData.Copy
toData.Cells(lastrow).PasteSpecial Paste:=xlPasteValues
End Sub