VBA导入Excel数据时源页面闪烁,求更优实现方案
Excel VBA导入指定区域数值的优化方案
原代码运行时会出现源文件页面闪烁的问题,而且大量重复的复制粘贴代码既冗余又不易维护,以下是针对性的优化方案:
1. 解决页面闪烁问题
Excel执行代码时默认会实时刷新界面,频繁的切换操作就会导致闪烁。只需在代码开头关闭屏幕更新,完成逻辑后再恢复即可:
Application.ScreenUpdating = False ' 核心执行逻辑 Application.ScreenUpdating = True
2. 简化重复的复制粘贴逻辑
原代码的复制粘贴操作高度重复,仅区域不同。可以把所有需要同步的区域存入数组,通过循环批量处理,大幅减少冗余代码,后续修改或新增区域也更便捷。
优化后的完整代码
Sub Import_New() Dim FileToOpen As Variant Dim OpenBook As Workbook Dim targetRanges As Variant Dim i As Integer ' 关闭屏幕更新,消除闪烁 Application.ScreenUpdating = False FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", FileFilter:="Excel Files (*.xls*),*xls*") If FileToOpen <> False Then Set OpenBook = Application.Workbooks.Open(FileToOpen) ' 存储所有需要同步的区域列表 targetRanges = Array( _ "D7:AY13", "D26:AY32", "D42:AY48", "D57:AY63", _ "D73:AY79", "D88:AY94", "D104:AY110", "D119:AY125", _ "D135:AY141", "D150:AY156", "D166:AY172", "D181:AY187", _ "D197:AY203", "D212:AY218", "D228:AY234", "D243:AY249", _ "D259:AY265", "D274:AY280", "D290:AY296") ' 循环批量处理区域复制 For i = LBound(targetRanges) To UBound(targetRanges) OpenBook.Sheets(1).Range(targetRanges(i)).Copy ThisWorkbook.Worksheets("New HR072").Range(targetRanges(i)).PasteSpecial xlPasteValues Next i ' 清除剪贴板状态,避免残留复制提示 Application.CutCopyMode = False OpenBook.Close False End If ' 恢复屏幕更新 Application.ScreenUpdating = True End Sub
额外优化说明
- 新增
Application.CutCopyMode = False,清除剪贴板的复制状态,避免Excel持续显示"复制中"的提示 - 数组存储区域后,后续调整同步范围只需修改数组内容,无需重复编写大量复制粘贴代码
内容的提问来源于stack exchange,提问作者Steve Bracher
相关产品推荐
相关产品推荐

