select范围时避免焦点更改 – Excel

我有一个macros,它根据一些标准创build一个给定的子范围。 然后将这个子范围复制到某个位置,在那里形成由Chart读取的数据。

每次单击微调器时都会调用macros,因为这会更改原始范围,因此需要计算新的子范围。

程序工作正常,虽然它可能是非常原始的(首先使用VBA-Excel的编码经验)。 只有一点,当我单击微调器更新数据并启动例程时,工作表的“焦点”从button的位置移动到macros的工作范围的开始位置。

我通过在例程结束处使用Application.Goto来克服这个问题,使窗口的左上angular回到Chart和Button所在的位置。

但是,这意味着每次运行macros时,窗口内容都会移动到范围,然后返回到我想要的位置。 这不是很高雅,除了可能导致一些海呕;-)

我想知道我能否避免这种情况,以及如何避免这种情况。

感谢任何input,代码如下。

Sub test_copy2() Dim InRange As Range Dim c As Range, o As Range, t As Range Dim r As Integer Set InRange = Cells.Range("M434:ATF434") Set o = Cells.Range("L434") For Each c In InRange If c.Offset(-219, 0).Value = 8448 Then Set t = Application.Union(o, c) Set o = t End If Next c o.Copy InRange(1, 1).Offset(2, -1).PasteSpecial (xlPasteValues) Application.Goto Cells.Range("AF456"), Scroll:=True End Sub 

也许:

 Sub test_copy2() Dim InRange As Range Dim c As Range, o As Range, t As Range Dim r As Integer Set InRange = Cells.Range("M434:ATF434") Set o = Cells.Range("L434") Application.ScreenUpdating = False For Each c In InRange If c.Offset(-219, 0).Value = 8448 Then Set t = Application.Union(o, c) Set o = t End If Next c o.Copy InRange(1, 1).Offset(2, -1).PasteSpecial (xlPasteValues) Application.Goto Cells.Range("AF456"), Scroll:=True Application.ScreenUpdating = True End Sub 

就像我刚才提到的那样,你可以避免如Way1所示的pastespecial ,或者如果你想要的值,然后用Way2显示的代码replace它

 o.Copy InRange(1, 1).Offset(2, -1).PasteSpecial (xlPasteValues) 

方法1

o.Copy InRange(1, 1).Offset(2, -1)

方式2

InRange(1, 1).Offset(2, -1).Resize(o.Rows.Count, o.Columns.Count).Value = o.Value