0

我有 2 个工作表,ws1 和 ws2。这是vba。它将转到 ws2,然后转到 ws1。我只想在 ws2 完成复制工作时看到 ws1,我不想在 ws1 和 ws2 之间折腾。

我应该如何纠正vba?

Sheets("ws2").Select
Range("A3:AA3").Select
Selection.Copy
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Range("A4").Select
Application.CutCopyMode = False
Range("A4:AA4").Select
Selection.Insert Shift:=xlDown
Sheets("ws1").Select
4

3 回答 3

2

杂耍发生是因为告诉 excel 做杂耍:) 因此我总是建议不要使用.SELECT/.ACTIVATE.

直接执行操作。看到这个。

Sub Sample()
    Dim ws As Worksheet

    Set ws = Sheets("ws2")

    With ws
        .Range("A3:AA3").Copy
        .Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        .Range("A4:AA4").Insert Shift:=xlDown
    End With
End Sub
于 2012-07-26T14:17:05.780 回答
0

利用

   Application.ScreenUpdating = False

在运行上述代码以停止查看宏正在执行的操作之前。

所以:

Sheets("ws1").Select
Application.ScreenUpdating = False
Range("A3:AA3").Select
.... etc

Application.ScreenUpdating = True
于 2012-07-26T14:09:35.837 回答
0

ozgrid 上的一个论坛条目提供了一个简单而优雅的解决方案

Sub NameOfSub() 

    Application.ScreenUpdating = False

    'Some Code Here

    Application.ScreenUpdating = True 

End Sub 
于 2012-07-26T14:14:54.823 回答