【问题标题】:excel: deselect range after run macroexcel:运行宏后取消选择范围
【发布时间】:2019-06-20 21:14:42
【问题描述】:

我想有一个简单的方法可以解决这个问题,但我看不清楚。

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

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

当我的宏完成时,它会让最后一个复制的列像这样选择:

有没有办法在最后取消选择该列?

【问题讨论】:

  • 录制宏时按退出键。它会给你application.cutcopymode = false
  • 有几种方法。您可以简单地通过Cells(1,1).Select 选择A1Application.CutCopyMode = False

标签: vba excel


【解决方案1】:

录制宏时按退出键。 它会给你:

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

而且速度更快。

【讨论】:

  • 注意 - 从 OP 中不清楚,但如果他们想“取消选择列”,那么也许只是在最后添加说 Cells(1,1).Select 就可以了。 CutCopyMode 只会取消选择要复制的范围,但仍会选中该范围。
  • @BruceWayne - 我完全同意。
  • @BruceWayne 是的,没错,我现在在测试解决方案时才注意到。无论如何,谢谢!
  • @Vityata 感谢您的编辑。实际上,我是 VBA 的新手,所以当我进行研究时,这是我发现的最好方法。我很高兴现在有所改进。
  • @paulinhax - 我很高兴能帮上忙。 :)
猜你喜欢
  • 2017-10-15
  • 1970-01-01
  • 2020-01-18
  • 2020-11-15
  • 2016-10-10
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多