我正在努力将大量数据从一个电子表格复制到工作簿中的其他160个电子表格中。目前,Excel(2013)遇到错误,因为它没有足够的资源来完成操作。
我的目标是将第4页的V13:XI1150范围内的数据复制到表5-160。我试图分割代码存储的范围(参见变量rng1和rng2),以及将10个工作表分组在一起(虽然我意识到这几乎没有效果)。
有没有办法简化我在这里工作的代码,以便我可以成功复制这些数据?
提前致谢。
Sub copypaste()
'''''''''Globals'''''''''''''
Dim j As Long 'Loop control variable
Dim sheetstart As Integer 'starting sheet variable
Dim sheetend As Integer 'ending sheet variable
Dim rng1 As Range 'range to copy
Dim rng2 As Range 'Second range
Application.Calculation = xlCalculationManual 'Sets manual calculation
Application.ScreenUpdating = False 'Turns off screen updating
sheetstart = 5 'first sheet to copy over in loop
sheetend = 15 'last sheeet to copy over in loop
With Sheets(4) 'Selects the 4th sheet
Set rng1 = Range("V13:LO1150") 'Stores first half of data in rng
Set rng2 = Range("LP13:XI1150") 'Stores second half of data in rng
End With
For j = 1 To 16 'loops through all groups of 10 sheets
copypaste10 rng1, sheetstart, sheetend 'calls copypaste10 function
copypaste10 rng2, sheetstart, sheetend 'calls copypaste10 function
sheetstart = sheetstart + 10 'increments to next 10 sheets
sheetend = sheetend + 10 'increments to next 10 sheets
Next
Application.Calculation = xlCalculationAutomatic 'Sets auto calculation
Application.ScreenUpdating = True 'Turns on screen updating
End Sub
Public Function copypaste10(rng As Range, sstart As Integer, sstop As Integer)
'''''''''Locals'''''''''''''
Dim i As Long 'Loop control
Dim WS As Worksheet 'worksheet being worked on
Dim ArrayOne() As String 'Array of sheets we are working on
ReDim ArrayOne(sstart To sstop) 'Array of sheets
''''''''''Calcuations'''''''''''''
For i = sstart To sstop
ArrayOne(i) = Sheets(i).Name
Next
For Each WS In Sheets(ArrayOne)
WS.Rows(2).Resize(rng.Count).Copy
rng.Copy Destination:=WS.Range("v13")
Next WS
End Function
答案 0 :(得分:1)
我使用以下代码进行了快速测试,运行得很好:
Sub test()
Application.ScreenUpdating = False
Dim rng As Range
Set rng = Worksheets("Sheet1").Range("V13:XI1150")
rng.Copy
For i = 2 To 161
Sheets(i).Select
Range("V13").Select
ActiveSheet.Paste
Next
Application.ScreenUpdating = True
End Sub
我的测试单元中只有静态数据,而不是公式。这可能会有所不同,因为当您重新打开自动计算时,这将对您的系统资源造成巨大打击,特别是如果它是您单元格中的复杂计算。
答案 1 :(得分:0)
这可能是你在循环中所做的额外复制,即
WS.Rows(2).Resize(rng.Count).Copy
该副本将存储到内存,即使您似乎没有粘贴到任何地方(说实话,但我不确定是否,即剪贴板将在退出函数后或根据需要清除)
尽管如此,如果您的范围原点中没有公式,则这是另一种解决方案。 由于您的目的地始终相同,并且您的原点范围是相同的维度(只是不同的起点),您可以避免复制/粘贴所有目标:
For Each WS In Sheets(ArrayOne)
WS.Range("V13:LO1150") = rng.Value
Next WS
再次注意,它只会将值复制到目标表单
<强> * - 编辑 - * 强>
如果您确实需要公式,可以将.Value
更改为.Formula
,但请注意,这将“粘贴”引用原始图纸的公式,而不是目标图纸的相对参考。我还会在运行宏(Application.Calculation = xlCalculationManual
之前关闭自动计算,并使用Application.Calculation =xlCalculationAutomatic
计算或打开最后的计算(Application.Calculate
)或者每隔几次“粘贴”之后