excel vba复制粘贴单元格而无需用户注意

时间:2018-04-25 07:41:41

标签: excel vba excel-vba copy-paste

我有一个宏,可以在不同的工作表中复制和粘贴很多单元格。这很好用,我的问题是:

是否可以让整个宏在后台运行?

由于宏将被没有经验的excel用户使用,我不希望他们看到宏跳转并复制大量数据,这会让屏幕变得疯狂。

提前感谢您的回答!

3 个答案:

答案 0 :(得分:3)

在宏的开头使用application.screenupdating = false

然后Application.Screenupdating = true结束,屏幕不会跳转。

还值得在最后添加Msgbox("The macro has finished!")或类似内容,以便他们知道它已经完成了它。

答案 1 :(得分:2)

我猜你的'宏'看起来像这样。

Sub Macro1()
    Sheets("Sheet1").Select
    ActiveWindow.SmallScroll Down:=4
    Range("J16").Select
    Selection.Copy
    Sheets("Sheet2").Select
    ActiveWindow.SmallScroll Down:=5
    ActiveWindow.SmallScroll ToRight:=2
    Range("I19").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Sheet1").Select
    ActiveWindow.SmallScroll Down:=-72
    Range("A1").Select
End Sub

如果这样写的话会更好。

Option Explicit

Sub Macro1()
    With Worksheets("Sheet2")
        .Range("I19") = Worksheets("sheet1").Range("J16").Value
    End With
End Sub

使用How to avoid using Select in Excel VBA.了解详情。

答案 2 :(得分:1)

您可以使用以下工具来实现目标:

  • Application.ScreenUpdating = False'关闭屏幕更新

这将隐藏任何屏幕更新,直到您再次打开它。如果您的应用程序正在使用各种.Activate等,您可能希望在

之前保存初始选择点
  • 各种事件触发Sub

要在“后台”启动某些内容,您可以启动它

Workbook.Open
Workbook.SheetActivate, Workbook.SheetDeactivate
Worksheet.Activate, Worksheet.Deactivate
' etc.