将一个excelsheet中的命名范围复制到另一个sheet中的命名范围
copy a named range in one excel sheet to a named range in another worksheet
我一直在尝试将一个 excel sheet 中的命名范围复制到另一个作品中的命名范围sheet
Sub Update()
'update availability and utilisation to SMU Tracking sheet
Application.ScreenUpdating = False
Dim ws1 As Worksheet:
Set ws1 = Worksheets("Delays_a") 'source
Dim ws2 As Worksheet:
Set ws2 = Worksheets("SMU Tracking") 'destination
'copy
ws1.Range("Productivity").Copy
ws2.Range("ProductivitySMU").Select
ws2.Range("ProductivitySMU").Paste
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
感谢任何帮助。
更新:
我也试过这个代码
Sub CommandButton2_Click()
'update availability and utilisatioon to SMU Tracking sheet
Dim ws1 As Worksheet:
Set ws1 = Worksheets("Delays_a") 'source
Dim ws2 As Worksheet:
Set ws2 = Worksheets("SMU Tracking") 'destination
'copy
ws1.Range("Productivity").Copy 'cells to copy
lrow = 1500000
For i = 5 To lrow
If Cells(i, 7) = "" Then 'If cell is empty then paste new value
ws2.Range("ProductivitySMU").PasteSpecial xlPasteValues
End If
Next i
End Sub
问题是值被粘贴到 Range("ProductivitySMU") 中的所有空单元格。
请尝试此代码。它将新数据附加到目标范围的预先存在的内容。
Private Sub CommandButton2_Click()
'update availability and utilisatioon to SMU Tracking sheet
Dim ws1 As Worksheet ' source
Dim ws2 As Worksheet ' destination
Dim Rt As Long ' target row
Dim Ct As Long ' target column
Set ws1 = Worksheets("Delays_a")
Set ws2 = Worksheets("SMU Tracking")
With ws2.Range("ProductivitySMU")
Ct = .Column
Rt = ws2.Cells(.Row, Ct).End(xlDown).Row + 1
If Rt > ws2.Rows.Count Then Rt = .Row
End With
ws1.Range("Productivity").Copy
With ws2.Cells(Rt, Ct)
.PasteSpecial xlPasteAll
.PasteSpecial xlPasteColumnWidths
' https://docs.microsoft.com/en-us/office/vba/api/excel.xlpastetype
End With
Application.CutCopyMode = False
End Sub
本质上,不需要命名目标范围,因为代码只是使用名称来查找目标单元格。事实上,如果列中的总行数超过指定的行数,则名称将变得无关紧要。就我的代码而言,目标范围的相关成员是它的第一个单元格。如果您在项目中对该范围有其他用途,您可以使其动态化,自动扩展到列的末尾,而不会影响此代码的功能。
我一直在尝试将一个 excel sheet 中的命名范围复制到另一个作品中的命名范围sheet
Sub Update()
'update availability and utilisation to SMU Tracking sheet
Application.ScreenUpdating = False
Dim ws1 As Worksheet:
Set ws1 = Worksheets("Delays_a") 'source
Dim ws2 As Worksheet:
Set ws2 = Worksheets("SMU Tracking") 'destination
'copy
ws1.Range("Productivity").Copy
ws2.Range("ProductivitySMU").Select
ws2.Range("ProductivitySMU").Paste
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
感谢任何帮助。
更新:
我也试过这个代码
Sub CommandButton2_Click()
'update availability and utilisatioon to SMU Tracking sheet
Dim ws1 As Worksheet:
Set ws1 = Worksheets("Delays_a") 'source
Dim ws2 As Worksheet:
Set ws2 = Worksheets("SMU Tracking") 'destination
'copy
ws1.Range("Productivity").Copy 'cells to copy
lrow = 1500000
For i = 5 To lrow
If Cells(i, 7) = "" Then 'If cell is empty then paste new value
ws2.Range("ProductivitySMU").PasteSpecial xlPasteValues
End If
Next i
End Sub
问题是值被粘贴到 Range("ProductivitySMU") 中的所有空单元格。
请尝试此代码。它将新数据附加到目标范围的预先存在的内容。
Private Sub CommandButton2_Click()
'update availability and utilisatioon to SMU Tracking sheet
Dim ws1 As Worksheet ' source
Dim ws2 As Worksheet ' destination
Dim Rt As Long ' target row
Dim Ct As Long ' target column
Set ws1 = Worksheets("Delays_a")
Set ws2 = Worksheets("SMU Tracking")
With ws2.Range("ProductivitySMU")
Ct = .Column
Rt = ws2.Cells(.Row, Ct).End(xlDown).Row + 1
If Rt > ws2.Rows.Count Then Rt = .Row
End With
ws1.Range("Productivity").Copy
With ws2.Cells(Rt, Ct)
.PasteSpecial xlPasteAll
.PasteSpecial xlPasteColumnWidths
' https://docs.microsoft.com/en-us/office/vba/api/excel.xlpastetype
End With
Application.CutCopyMode = False
End Sub
本质上,不需要命名目标范围,因为代码只是使用名称来查找目标单元格。事实上,如果列中的总行数超过指定的行数,则名称将变得无关紧要。就我的代码而言,目标范围的相关成员是它的第一个单元格。如果您在项目中对该范围有其他用途,您可以使其动态化,自动扩展到列的末尾,而不会影响此代码的功能。