Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Workbooks.Open Filename:="Blah"
Windows("DDD.xlsm").Activate
Sheets("DDDDD").Select
Range("B4:E4500").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Dude").Activate
Sheets("DDDDD").Select
Range("B4:E4").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
答案 0 :(得分:1)
试试这个。打开文件时,我认为你不会更快地得到它。
Sub Demo()
' Declare variables
Dim wbSrc As Workbook
Dim wsSrc As Worksheet
Dim rSrc As Range
Dim wbDst As Workbook
Dim wsDst As Worksheet
Dim rDst As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' Avoid Select
Set wbSrc = Workbooks.Open(Filename:="Blah")
Set wsSrc = wbSrc.Sheets("DDDDD")
Set rSrc = wsSrc.Range("B4:E4500")
Set wbDst = Workbooks("Dude") ' Check this, may need to adjust
Set wsDst = wbDst.Sheets("DDDDD")
Set rDst = wsDst.Range("B4:E4500")
' Avoid clipboard
rDst.Value = rSrc.Value
' restore settings
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
另一种方法可能是使用ADO查询已关闭工作簿中的数据。
想到另一个appraoch:
Sub Demo()
Dim ws As Worksheet
Dim rng As Range
Set ws = ActiveSheet ' <-- Change to your target sheet
Set rng = ws.Range("B4:E4500")
rng.FormulaR1C1 = "='Path\To\Your\File\[Blah.xls]DDDD'!RC"
rng.Value = rng.Value
End Sub
这使用了这样一个事实,即在不打开工作簿的情况下,引用已关闭工作簿中的单元格的简单公式将更新。
ws
引用您要将检索到的数据放入示例中的工作表(ActiveSheet
,并根据您的需要进行更新。)
rng
是您要放置检索到的数据的ws
范围。
rng.FormulaR1C1 = ...
在rng
的每个单元格中放置一个公式。在这种情况下,它引用已关闭工作簿中的相同单元格。从已关闭工作簿的完整路径,文件名和工作表名称构建公式。我使用R1C1
样式来利用简单的RC
语法来获取rng
rng.Value = rng.Value
将公式转换为值(与复制,粘贴值相同,但更快更小)。如果你愿意,你可以保留公式。
答案 1 :(得分:0)
这篇文章包含几个可能对您有帮助的要点。 OZGRID-Optimize Slow VBA Code。帖子中的几点适用于您的情况,例如:绕过剪贴板,在执行代码时防止计算并停止屏幕闪烁等。