2015-02-09 73 views
1

我在VBA代码上遇到了“ActiveCell.Row”命令的问题,我知道它必须是一个简单的修复程序,但是我已经做了一些研究,没有找到答案问题。最近活动的单元格行

下面的代码获取下一个活动单元格的行号,而不是我编辑的单元格。

示例:如果我编辑单元格“B2”并按下Enter键,它将返回B3行,因为在代码运行时它将成为当前活动单元格。如果我按Tab键,它将返回正确的数字“2”,因为活动单元格将是“C2”。如果我按向上箭头,它将返回行“1”,因为活动单元格将是“B1”。

我感谢您的帮助!谢谢! (附注:我试着给here的解决方案和其他一些我发现,但没有成功)

Private Sub Worksheet_Change(ByVal Alvo As Range) 
    Dim limite_maximo As Integer 
    limite_maximo = 1000 
    If Alvo.Cells.Count > 1 Or IsEmpty(Alvo) Then Exit Sub 

    If Alvo.Column = 2 And Alvo.Row >= 1 And Alvo.Row <= limite_maximo Then 
     Application.EnableEvents = False 
     a = ActiveCell.Row - 5 
     b = 10 
     Alvo.Offset(0, 2).Value = b 
     Alvo.Offset(0, 3).Value = a 
     Alvo.Offset(0, 4).Value = b & "." & Format(a, "000000") 
     Application.EnableEvents = True 
    End If 

End Sub 
+2

'Alvo'是已更改的单元格,因此您应该使用该单元格而不是'activecell' – Rory 2015-02-09 11:35:36

+1

'Alvo'是您更改的单元格的范围。所以使用'Alvo.Row'来获得这一行。 – 2015-02-09 11:44:06

+0

超棒的家伙! 我已经改了行 A = ActiveCell.Row - 5 到 A = Alvo.Row - 5 而现在它完美的作品! 对新手问题抱歉,但我真的很困难。 非常感谢! – 2015-02-09 12:02:55

回答

0

在我的Excel 选项,光标在单元格中输入数据后下移。
如果我安装:

Private Sub Worksheet_Change(ByVal Target As Range) 
    MsgBox Target.Row 
    MsgBox ActiveCell.Row 
End Sub 

和编辑电池B9,第一输出将但第二输出将是

这样你就可以决定的行数更改后的单元格和更改后的活动单元格的行号。

0

得到它得益于Paul Kelly的意见和Rory

我已经改变了 “A = ActiveCell.Row - 5” 行至 “A = Alvo.Row - 5”,现在它完美的作品!对于新手问题抱歉,但我真的很挣扎。

谢谢!