选择范围时避免焦点更改--Excel
我有一个宏,它根据一些条件从一个给定范围创建一个子范围。 然后在某个位置复制此子范围,在该位置形成图表读取的数据 每次单击微调器时都会调用宏,因为这会更改原始范围,因此需要计算新的子范围 该过程运行良好,但可能非常原始(第一次使用VBA Excel进行编码)。只有一点,当我单击微调器更新数据并启动例程时,工作表的“焦点”从按钮位置移动到宏工作范围的开始 我通过在例程结束时使用Application.Goto将窗口的左上角恢复到图表和按钮所在的位置来克服这个问题 但是,这意味着每次运行宏时,窗口内容都会移动到所需的范围,然后返回到所需的位置。除了可能引起一些晕船之外,这并不太优雅;-) 我想知道我是否可以避免,以及如何避免 感谢您的任何输入,代码如下选择范围时避免焦点更改--Excel,excel,vba,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
也许:
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中所示的代码替换它
o.Copy
InRange(1, 1).Offset(2, -1).PasteSpecial (xlPasteValues)
方式1
o.Copy in范围(1,1)。偏移量(2,-1)
方式2
InRange(1,1).偏移量(2,-1).调整大小(o.Rows.Count,o.Columns.Count).Value=o.Value
是否需要Pastespecial
?如果没有,则使用此选项,将不会发生移位。o.Copy InRange(1,1)。Offset(2,-1)
感谢您的回复。我不太明白你的问题。一旦我“评估”了所需的范围,即我知道哪些单元格满足标准,那么我需要“物理”地将这些单元格放在工作表的其他地方,因为它们是我希望显示的数据集。请参见下面的答案:)谢谢Siddhart,我也会尝试方法2,但我想这会改变我的输入范围,对吗?我不想那样。只需从现有范围创建/另一个/子范围。不过,原则上,我想我能理解你的观点。如果我足够聪明和精通,我就不需要在任何地方复制子范围,只要使用它。也许可以使用此子范围作为我的x值,使用另一个子范围作为我的y值来更新图表。