2015-07-03 93 views
0

我已经将值放在从C到F的列中,G是从这些单元格(C到F)的计算。如果数值发生变化,使用Excel VBA自动移动到单元格

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

我曾尝试使用宏加VBA,但它似乎有问题。

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

MACRO

Sub Macro1() 
' 
' Macro1 Macro 
' 
    ActiveCell.Offset(1, -3).Range("A1").Select 
End Sub 

在H6,我用F单元的总和来触发它,但它没有工作。

Image

回答

0

您的电池H6只检查。它只会在您输入H6其他单元格不起作用时才会移动。

因此,测试了F列(6号):

if Target.Column = 6 then 
    .... 
endif 

由于acive细胞可能是下面的一个编辑(如果用户按下输入)或其他地方(如果用户只需点击另一个地方)使用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 
0

此代码只会如果用户更改单元格H6值火灾。如果该值因计算而改变(即由于用户更改了另一个单元格中的值),它不会触发。这是在https://msdn.microsoft.com/en-us/library/office/ff839775.aspx工作表更改事件的MSDN文档中提到的。

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

而不是使用ActiveCell的,你可以使用目标从更改事件,因为我们知道的是,在更新单元:

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中的许多单元格,您可能想要测试特定的Colum(F)和一系列行号,而不是一个单元格地址。除非你正在做更复杂的事情,否则也没有必要调用一个单独的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 

(您需要根据需要调整行号)。

相关问题