Excel:运行宏后取消选择范围

3

我想解决这个问题应该有一个简单的方法,但我还没有清楚地看到它。

每次我在表格中更改任何单元格时,都会触发下面的代码:

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是否有办法在结束时取消选定此列?

按下 Esc 键来录制宏。这将为您提供 application.cutcopymode = false - Vityata
有几种方法。您可以简单地执行 Cells(1,1).Select 来选择 A1,或者 Application.CutCopyMode = False - BruceWayne
这回答解决了你的问题吗?在编写 Excel 代码时将选择设置为“无” - Sandra Rossi
1个回答

5

当你记录宏时,请按Esc键。 这会给您:

Application.CutCopyMode = False

编辑: 一般来说,您的代码不需要复制和粘贴——您只需要值即可。因此,类似以下的内容就可以工作:

Sub copy_column()

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

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

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

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

End Sub

而且它更快。


4
注意 - 从原帖中并不清楚,但如果他们想要“取消选择该列”,那么在最后添加Cells(1,1).Select可能会起作用。 CutCopyMode只会取消复制的范围,但仍会保留该范围的选定状态。 - BruceWayne
@BruceWayne - 我完全同意。 - Vityata
1
@BruceWayne 是的,那是真的,我现在才注意到当我测试解决方案时。无论如何,谢谢你们两个! - paulinhax
1
@Vityata 谢谢您的编辑。实际上,我是 VBA 的新手,所以当我进行研究时,这是我找到的最佳方法。我很高兴现在它得到了改进。 - paulinhax
@paulinhax - 我很高兴能够帮助。 :) - Vityata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接