Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 粘贴后将光标移动到非相邻单元格_Excel_Vba - Fatal编程技术网

Excel 粘贴后将光标移动到非相邻单元格

Excel 粘贴后将光标移动到非相邻单元格,excel,vba,Excel,Vba,我的电子表格有几个非相邻的单元格块需要填写:A3:D4、F3:I7、K3:N7,然后是A9:D10、F9:I13、K9:N13等。我将从Internet复制的数据一个接一个地粘贴到每个块中。粘贴到一个块中后,我希望光标自动移动到下一个块的开始处,以便进行下一次粘贴,即粘贴A3:D4时移到F3,粘贴F3:I7时移到K3,粘贴K3:N7时移到A9,等等 在尝试调整之前,我找到并尝试了这个宏进行练习,但无法使其工作,因为它甚至没有列在Alt-F8菜单中。它似乎接近我所需要的,因为它似乎是“一旦A1有一

我的电子表格有几个非相邻的单元格块需要填写:A3:D4、F3:I7、K3:N7,然后是A9:D10、F9:I13、K9:N13等。我将从Internet复制的数据一个接一个地粘贴到每个块中。粘贴到一个块中后,我希望光标自动移动到下一个块的开始处,以便进行下一次粘贴,即粘贴A3:D4时移到F3,粘贴F3:I7时移到K3,粘贴K3:N7时移到A9,等等

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


您发布的代码有正确的想法,但在本例中使用了错误的方法。 我刚刚测试了下面的代码,它可以正常工作

它甚至没有列在Alt-F8菜单中-它不会显示在宏对话框列表中,因为它是一个,本质上是私有代码,不能单独运行。它必须放在您所针对的工作表对象内

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
“暴力”方法可能是:

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时,不应期望宏出现,因为宏标记为“私有”。但是,只要在相关范围内更改其中一个单元格的值,它就会运行


当斯科特抢先回答我的问题时,我决定做得更好,并添加一种基于“计算”的方法,这样被选择的领域就不会局限于你在问题中提到的六个领域。以下代码将从
A3:D4
F3:I7
K3:N7
A9:D10
F9:I13
K9:N13
A15:D16
F15:I19
。。。无限的

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Select Case Target.Column
        Case 1, 2, 3, 4
            Select Case Target.Row Mod 6
                Case 3, 4
                    Cells(6 * ((Target.Row - 3) \ 6) + 3, "F").Resize(5, 4).Select
            End Select
        Case 6, 7, 8, 9
            Select Case Target.Row Mod 6
                Case 2
                Case Else
                    Cells(6 * ((Target.Row - 3) \ 6) + 3, "K").Resize(5, 4).Select
            End Select
        Case 11, 12, 13, 14
            Select Case Target.Row Mod 6
                Case 2
                Case Else
                    Cells(6 * ((Target.Row - 3) \ 6) + 9, "A").Resize(2, 4).Select
            End Select
    End Select
End Sub

哈哈-我正要点击“发布你的答案”,注意到你的答案出现了。这个问题已经有两个小时没有回答了,然后我们两人在一分钟内就开始回答。我尝试了“蛮力”宏,但在将数据粘贴到A3:D4中后,光标仍停留在A3中。这份名为“赔率”的工作表是工作簿中八份工作表之一。我右键单击Microsoft Excel对象下的工作表,然后插入>模块打开空白模块5,并将代码复制到该模块中。这就是我要做的一切吗?尝试使用Tab和Enter手动填充A3:D4以查看粘贴是否有问题,但仍然无法转到F3。一旦我掌握了暴力,我将尝试选择案例一。感谢Scott和YowE3K。@标记
工作表\u更改
代码需要进入工作表本身的代码模块,因此右键单击Microsoft Excel对象下的该工作表,然后单击查看代码。(或者只需双击Microsoft Excel对象下的工作表名称-这也将打开该工作表的代码模块。)哇,YowE3K!这就成功了。“蛮力”就像一个符咒。毫无疑问,精选案例一也将如此。非常感谢。这是我第一次尝试vba。我以前所有的宏都是简单录制的。在72岁的时候,我开始钻研vba代码的复杂性可能有点老了,所以能够接触到像你这样的人真是太棒了。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Select Case Target.Column
        Case 1, 2, 3, 4
            Select Case Target.Row Mod 6
                Case 3, 4
                    Cells(6 * ((Target.Row - 3) \ 6) + 3, "F").Resize(5, 4).Select
            End Select
        Case 6, 7, 8, 9
            Select Case Target.Row Mod 6
                Case 2
                Case Else
                    Cells(6 * ((Target.Row - 3) \ 6) + 3, "K").Resize(5, 4).Select
            End Select
        Case 11, 12, 13, 14
            Select Case Target.Row Mod 6
                Case 2
                Case Else
                    Cells(6 * ((Target.Row - 3) \ 6) + 9, "A").Resize(2, 4).Select
            End Select
    End Select
End Sub