我将值放在从C到F的列中,其中G是从这些单元格(C到F)计算的。
当我将数字放在单元格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单元格的SUM来触发它,但它没有用。
答案 0 :(得分:0)
您只检查单元格H6
。只有在H6
中键入内容时,它才会移动,其他单元格将无效。
因此,测试F列(编号6):
if Target.Column = 6 then
....
endif
由于acive单元格可能低于编辑的单元格(如果用户按下enter键)或其他任何地方(如果用户只是单击其他位置),使用ActiveCell
将是一件坏事,请改用行代替:< / p>
if Target.Column = 6 then
call Macro1(Target.row)
end if
Sub Macro1(row as integer)
Worksheets("TheNameOfTheSheet").Cells(row,3).Select
end sub
答案 1 :(得分:0)
只有当用户更改单元格H6中的值时,才会触发此代码。如果由于计算而改变该值,则不会触发(即因为用户更改了另一个单元格中的值)。这在https://msdn.microsoft.com/en-us/library/office/ff839775.aspx的工作表更改事件的MSDN文档中提到。
此外,我建议不要使用ActiveCell.Offset,因为您不知道运行macro1时哪个单元格将处于活动状态。如果用户在F6中键入数字并按Enter键,则F7将成为Activecell,但如果用户键入数字并按下右箭头键,则它将是单元格G6。
您可以使用Change事件中的Target,而不是使用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)和一系列行号,而不是一个单元格地址。除非你做一些更复杂的事情,否则也没有必要调用一个单独的子。您可能想尝试以下内容:
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
(您需要根据需要调整行号。)