2017-06-01 178 views
2

我想有一个简单的方法可以解决这个问题,但我看不清楚。excel:运行宏后取消选择范围

每次我改变任何单元格在我的片它会触发下面这段代码:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Target, Target.Worksheet.Range("A:S")) Is Nothing Then 
copy_column 
End Sub 

此代码运行我copy_column宏(即拷贝一些列从我原来的表到另一个)。首先发生的代码是因为我想在原始表更改时自动更新目标表。

Sub copy_column() 

Set origem = Sheets("FUNCIONÁRIOS").Range("A4:C1040000") 
Set destino = Sheets("BASE_TOTAL").Range("A2") 
origem.Copy 
destino.PasteSpecial Paste:=xlPasteValues 

Set origem_subs = Sheets("FUNCIONÁRIOS").Range("S4:S1040000") 
Set destino_subs = Sheets("BASE_TOTAL").Range("J2") 
origem_subs.Copy 
destino_subs.PasteSpecial Paste:=xlPasteValues 

Set origem_ini_fer = Sheets("FUNCIONÁRIOS").Range("L4:L1040000") 
Set destino_ini_fer = Sheets("BASE_TOTAL").Range("H2") 
origem_ini_fer.Copy 
destino_ini_fer.PasteSpecial Paste:=xlPasteValues 

Set origem_fim_fer = Sheets("FUNCIONÁRIOS").Range("P4:P1040000") 
Set destino_fim_fer = Sheets("BASE_TOTAL").Range("I2") 
origem_fim_fer.Copy 
destino_fim_fer.PasteSpecial Paste:=xlPasteValues 
End Sub 

当我的宏完成它允许选择这样最后复制列:

enter image description here

有什么办法来取消在结束此列?

+0

当您录制宏时按下转义键。它会给你'application.cutcopymode = false' – Vityata

+0

有几种方法。你可以简单地使用'Cells(1,1).Select'来选择'A1',或者'Application.CutCopyMode = False' – BruceWayne

回答

3

录制宏时按下转义键。 它会给你:

Application.CutCopyMode = False

编辑: 一般情况下,你的代码不需要复制和粘贴 - 你只需要值。因此,这样的事情将起作用:

Sub copy_column() 

    Set origem = Sheets("FUNCIONÁRIOS").Range("A4:C1040004") 
    Set destino = Sheets("BASE_TOTAL").Range("A2:P1040002") 
    rngDestino.Value = rngOrigem.Value 

    Set origem_subs = Sheets("FUNCIONÁRIOS").Range("S4:S1040004") 
    Set destino_subs = Sheets("BASE_TOTAL").Range("J2:J1040002") 
    rngDestino.Value = rngOrigem.Value 


    Set origem_ini_fer = Sheets("FUNCIONÁRIOS").Range("L4:L1040004") 
    Set destino_ini_fer = Sheets("BASE_TOTAL").Range("H2:L1040002") 
    rngDestino.Value = rngOrigem.Value 


    Set origem_fim_fer = Sheets("FUNCIONÁRIOS").Range("P4:P1040004") 
    Set destino_fim_fer = Sheets("BASE_TOTAL").Range("I2:P1040002") 
    rngDestino.Value = rngOrigem.Value 


End Sub 

而且速度更快。

+2

注意 - 从OP中不清楚,但是如果他们想要“取消选择列”,那么也许只需在最后添加'Cells(1,1).Select'就行了。 'CutCopyMode'只会取消选择要复制的范围,但仍保留选定的范围。 – BruceWayne

+0

@BruceWayne - 我完全同意。 – Vityata

+1

@BruceWayne是的,那是真的,我现在只是在测试解决方案时注意到了。无论如何,谢谢你们! – paulinhax