2017-06-01 34 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