粘贴后将光标移动到不相邻的单元格

时间:2017-08-14 21:49:31

标签: excel-vba vba excel

我的电子表格中有几个非相邻的单元格要填充:A3:D4,F3:I7,K3:N7,然后是A9:D10,F9:I13,K9:N13等。我粘贴的数据是从互联网进入每个街区,一个接一个。一旦我粘贴到一个块,我希望光标自动切换到下一个块的开始准备下一次粘贴,即当A3:D4被粘贴时到F3,当粘贴F3:I7时到K3,到A9时K3:粘贴N7等。

我在尝试调整之前发现并尝试使用此宏进行练习,但无法使其工作,因为它甚至没有在Alt-F8菜单中列出。它似乎接近我需要的东西,因为它似乎是“一旦A1有一个值,将光标移动到C15;一旦C15有一个值,转到F9;一旦F9有一个值,回到A1”

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Select Case Target.Address()
Case "$A$1"
    Range("$C$15").Select
Case "$C$15"
    Range("$F$9").Select
Case "$F$9"
    Range("$A$1").Select
End Select
End Sub

2 个答案:

答案 0 :(得分:1)

您发布的代码有正确的想法,但在这种情况下使用了错误的方法。 我刚刚测试了下面的代码,它确实有效。

它甚至没有在Alt-F8菜单中列出 - 它不会出现在宏对话框列表中,因为它是Worksheet_Change Event,它本质上是私有代码,不能独立运行。它必须放在您正在处理的工作表对象中。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
        Me.Range("C15").Select
    ElseIf Not Intersect(Target, Me.Range("C15")) Is Nothing Then
        Me.Range("F9").Select
    ElseIf Not Intersect(Target, Me.Range("F9")) Is Nothing Then
        Me.Range("A1").Select
    End If

End Sub

答案 1 :(得分:0)

“暴力”方法可能是:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Not Intersect(Target, Range("A3:D4")) Is Nothing Then
        Range("F3:I7").Select
    ElseIf Not Intersect(Target, Range("F3:I7")) Is Nothing Then
        Range("K3:N7").Select
    ElseIf Not Intersect(Target, Range("K3:N7")) Is Nothing Then
        Range("A9:D10").Select
    ElseIf Not Intersect(Target, Range("A9:D10")) Is Nothing Then
        Range("F9:I13").Select
    ElseIf Not Intersect(Target, Range("F9:I13")) Is Nothing Then
        Range("K9:N13").Select
    ElseIf Not Intersect(Target, Range("K9:N13")) Is Nothing Then
        Range("A3:D4").Select
    End If
End Sub

假设您已将代码正确放置在希望代码应用到的工作表的代码模块中,则在按 Alt + F8 ,因为它被标记为Private。但是,只要您更改相关范围中某个单元格的值,它就会运行。

当斯科特打败我的答案时,我决定更好地添加一个“基于计算”的方法,以便所选区域不限于你在问题中提到的六个区域。以下代码将从A3:D4F3:I7K3:N7A9:D10F9:I13K9:N13A15:D16到{{ 1}} ...无限广告。

F15:I19