我写了以下For Loop来将几个范围从一个工作表复制并粘贴到另一个工作表。我用了一个数组。程序运行正常,但我一直在寻找一种更短的方法来做同样的事情。
Dim copyRange(1 To 3) As String
Dim pasteRange(1 To 3) As String
Dim refRange(1 To 3) As String
Dim i As Long
copyRange(1) = "A5"
copyRange(2) = "G5"
copyRange(3) = "H5"
refRange(1) = "A"
refRange(2) = "G"
refRange(3) = "H"
pasteRange(1) = "BE3"
pasteRange(2) = "CA2"
pasteRange(3) = "CD2"
For i = 1 To 3
refApplicantFlow.Range(copyRange(i), refApplicantFlow.Range(refRange(i) & Rows.Count).End(xlUp)).Copy _
calcCalculations.Range(pasteRange(i))
Next i
答案 0 :(得分:2)
首先,我强烈建议将对单元格的引用存储为宏中的硬编码字符串。在您的工作簿结构略微调整的那一刻,您的宏将失败/复制错误的东西!
相反,使用命名范围。即点击A5
并为其指定名称Source_1
左右。 G5
将成为Source_2
,H5
Source_1
,G5
Target_1
等。
使用此代码:
lngRows = Rows.Count
For i = 1 To 3
Range("Target_"&i).Resize(lngRows).Value = Range("Source_"&i).Resize(lngRows).Value
Next
这样,即使工作簿结构发生变化,您的宏仍然可以正常工作!你的代码行变短了! ; - )
答案 1 :(得分:0)
如果意图是包含循环和数组,那么你的宏非常有效。同样的事情可以用3行完成:
refApplicantFlow.Range("A5", refApplicantFlow.Range("A" & Rows.Count).End(xlUp)).Copy _
calcCalculations.Range("BE3")
refApplicantFlow.Range("G5", refApplicantFlow.Range("G" & Rows.Count).End(xlUp)).Copy _
calcCalculations.Range("CA2")
refApplicantFlow.Range("H5", refApplicantFlow.Range("H" & Rows.Count).End(xlUp)).Copy _
calcCalculations.Range("CD2")