选择范围时避免焦点更改 - Excel

时间:2013-11-21 14:23:38

标签: excel vba

我有一个宏,根据一些标准创建一个给定的子范围。 然后将该子范围复制到某个位置,在该位置形成由图表读取的数据。

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

该过程工作正常,虽然它可能非常原始(使用VBA-Excel的第一次编码经验)。仅指出,当我单击微调器以更新数据并启动例程时,工作表的“焦点”从按钮的位置移动到宏工作范围的开头。

我通过在例程结束时使用Application.Goto来克服这个问题,将窗口的左上角带回图表和按钮所在的位置。

但是,这意味着每次运行宏时,窗口内容都会移动到该范围,然后返回到我想要的位置。这不是很优雅,除了可能引起一些晕船之外; - )

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

感谢任何输入,代码如下。

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

2 个答案:

答案 0 :(得分:4)

也许:

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

答案 1 :(得分:4)

就像我提到的那样,您可以避免pastespecial中显示Way1,或者如果您想要值,则将其替换为Way2

中显示的代码
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