【发布时间】:2015-09-05 07:51:21
【问题描述】:
我已经成功地创建了一个宏,该宏将一个(关闭的)工作簿中的几列的内容复制到另一个已经打开的工作簿。
问题是下面的代码导致最后一行总是显示每列的 N/A... 你知道我的代码中的错误是什么吗?我宁愿修复它而不是添加另一行删除 N/As 的代码。
这是代码(我还注意到使用 ActiveWorkbook 或 ThisWorkbook 会大大降低宏的速度...关闭自动计算以使其运行得更快,但如果您有任何进一步的建议来简化代码,请告诉我)。
Sub DataFromClosedFile()
On Error GoTo ErrHandler
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
x 是封闭的源工作簿 y 是将数据粘贴到的当前活动工作簿
Dim x As Workbook
Dim y As Workbook
Dim CA_TotalRows As Integer
Dim CA_Count As Integer
我认为带有“ThisWorkbook”的下一行代码会显着减慢一切 - 不知道为什么,但是哦……
Set y = ThisWorkbook 'Could also have used ActiveWorkbook
Set x = Workbooks.Open("PATH", True, True)
接下来,计算需要复制的行数(我不想复制标题,所以我从第2行开始:
CA_TotalRows = x.Worksheets("August_2015_CA").Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row).Rows.Count + 1
另外,我只想从源数据手册中复制 A:B 和 E:H 列。因此重复的公式。再次感谢任何关于如何最大限度地提高代码效率的建议!
For CA_Count = 1 To CA_TotalRows
y.Worksheets("Sheet3").Range("A1:B" & CA_Count).Formula = x.Worksheets("August_2015_CA").Range("A2:B" & CA_Count).Formula
Next CA_Count
For CA_Count = 1 To CA_TotalRows
y.Worksheets("Sheet3").Range("C1:F" & CA_Count).Formula = x.Worksheets("August_2015_CA").Range("E2:H" & CA_Count).Formula
Next CA_Count
因此,在执行最后一个代码之后的某个时刻,最后一行会被复制为每列的一堆 N/As...。如何避免?!
x.Close False
Set x = Nothing
Application.Calculation = xlCalculationAutomatic
ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
【问题讨论】: