使用Excel VBA在值更改时自动移动到单元格

使用Excel VBA在值更改时自动移动到单元格,vba,excel,cells,Vba,Excel,Cells,我把值放在从C到F的列中,G是这些单元格(C到F)的计算值 当我把数字放在F单元的末尾时,有没有办法自动移到下一行的C单元 我曾尝试使用macro plus VBA,但似乎存在问题 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$H$6" Then Call Macro1 End If End Sub 宏 在H6中,我使用F单元格的和来触发它,但它不起作用 您只

我把值放在从C到F的列中,G是这些单元格(C到F)的计算值

当我把数字放在F单元的末尾时,有没有办法自动移到下一行的C单元

我曾尝试使用macro plus VBA,但似乎存在问题

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$H$6" Then
        Call Macro1
    End If
End Sub

在H6中,我使用F单元格的和来触发它,但它不起作用


您只检查单元格
H6
。只有在
H6
中键入内容时,它才会移动,其他单元格将无效

因此,测试F列(数字6):

由于acive单元格可能位于已编辑的单元格下方(如果用户按enter键)或其他任何位置(如果用户刚刚单击了其他位置),因此使用
ActiveCell
将是一件坏事,请改用更改的行:

if Target.Column = 6 then
     call Macro1(Target.row)
end if


Sub Macro1(row as integer)
     Worksheets("TheNameOfTheSheet").Cells(row,3).Select
end sub

此代码仅在用户更改单元格H6中的值时才会触发。如果由于计算而更改了该值(即用户更改了另一个单元格中的值),则不会触发。MSDN文档中提到了工作表更改事件

另外,我建议不要使用ActiveCell.Offset,因为在运行macro1时,您不知道哪个单元格将处于活动状态。如果用户在F6中键入一个数字并按enter键,则F7将成为Activecell,但如果用户键入一个数字并按向右箭头键,则它将是单元格G6

不使用ActiveCell,您可以使用Change事件中的Target,因为我们知道这是已更新的单元格:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$6" Then
        Macro1 LastCell:=Target
    End If
End Sub

Sub Macro1(LastCell As Range)
    LastCell.Offset(1, -3).Select
End Sub
如果有多行数据,并且希望对F中的多个单元格重复宏,则可能需要测试特定列(F)和一系列行号,而不是一个单元格地址。除非你在做更复杂的事情,否则也没有必要单独叫一个潜艇。您可能希望尝试以下操作:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 6 Then
        If Target.Row > 1 And Target.Row < 10 Then
            Target.Offset(1, -3).Select
        End If
    End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Column=6,则
如果目标行>1,则为目标行<10
目标。偏移量(1,-3)。选择
如果结束
如果结束
端接头
(您需要根据需要调整行号)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$F$6" Then
        Macro1 LastCell:=Target
    End If
End Sub

Sub Macro1(LastCell As Range)
    LastCell.Offset(1, -3).Select
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 6 Then
        If Target.Row > 1 And Target.Row < 10 Then
            Target.Offset(1, -3).Select
        End If
    End If
End Sub