【发布时间】:2018-09-12 23:04:43
【问题描述】:
已回答,见下文。
我有一段代码可以打开一个文件,从打开的文件中复制日期,然后粘贴到另一个文件中。当我单步执行代码时,一切正常。当我运行代码时,它会重新启动excel。想法?
Sub copyPastefile()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim currwb, wb1, wb2, wb3, wb4, wb5 As Workbook
Set currwb= ThisWorkbook
Set wb1 = Workbooks.Open(Filename:="FileLocation\workbook1.xls")
wb1.Sheets("Sheet1").Range("C9:c11").Copy
ThisWorkbook.Sheets("wb1").Range("k18").PasteSpecial Paste:=xlPasteValues
wb1.Sheets("Sheet1").Range("o22:w22").Copy
ThisWorkbook.Sheets("wb1").Range("e35").PasteSpecial Paste:=xlPasteValues
wb1.Sheets("Sheet1").Range("b38:I48").Copy
ThisWorkbook.Sheets("wb1").Range("a5").PasteSpecial Paste:=xlPasteValues
wb1.Close
currwb.Sheets("wb1").Range("A1").Activate
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
ThisWorkbook.Activate
ThisWorkbook.Sheets("Sheet6").Activate
Range("A1").Activate
currwb.Save
MsgBox ("Done")
此代码随后针对 wb2、wb3 等重复,但现在粘贴到其各自的工作表中。
【问题讨论】:
-
您是否在脚本结束时将 Applicaiton.ScreenUpdating 重置为 True 并将 .Calculation 重置为 Automatic?这里是否缺少更多代码?在调试模式下,Application.ScreenUpdating 命令被忽略并保留为 True,因此这很可能解释了为什么它在调试逐步模式下“工作”。我敢打赌它在运行时会按照您的预期进行,您只是看不到更新的结果。
-
这听起来像是一场幽灵般的休息 - stackoverflow.com/questions/2154699/…
-
所有 wb 变量不被视为工作簿,它们被视为变体。唯一被认为是工作簿的是 wb5。您需要将每一个标识为工作簿。
dim currwb as workbook, wb1 as workbook, wb2 as workbook...等 -
你也有
set wb1=,但稍后在代码中调用它workbook1.sheets( -
这就是我尝试调整代码时得到的结果。修复了语法错误,我的脚本末尾已经有了 .Calc Automatic。对此深表歉意。
标签: excel file copy-paste vba