在更改VBA之前捕获行号
我刚开始写在更改VBA之前捕获行号,vba,excel,Vba,Excel,我刚开始写VBA代码,我面临一个问题。如果我在单元格b11中并切换到单元格a2或c2,则代码可以正常工作。但是,如果我在cellb2中写入一些内容并按Enter键,则代码不起作用。我假设这是由于ActiveCell.row引起的。即使按Enter键,如何使其正常工作 另外,我需要ActiveCell.Row以便在MsgBox错误中获取单元格编号 Sub Change() Dim i As Long i = ActiveCell.Row If (Cells(i, "B") + Cells(i
VBA
代码,我面临一个问题。如果我在单元格b11
中并切换到单元格a2
或c2
,则代码可以正常工作。但是,如果我在cellb2
中写入一些内容并按Enter键,则代码不起作用。我假设这是由于ActiveCell.row
引起的。即使按Enter键,如何使其正常工作
另外,我需要ActiveCell.Row
以便在MsgBox
错误中获取单元格编号
Sub Change()
Dim i As Long
i = ActiveCell.Row
If (Cells(i, "B") + Cells(i, "D")) <> Cells(i, "F") Then
MsgBox "B" & i & " + D" & i & " must equal cell F" & i & " which is: " & Range("W" & i).Value
Cells(i, "B").Interior.Color = RGB(255, 0, 0)
Cells(i, "D").Interior.Color = RGB(255, 0, 0)
Else
Range(Cells(i, "B"), Cells(i, "D")).Interior.Color = RGB(1000, 1000, 1000)
End If
End Sub
如果您希望在修改单元格“B2”时代码正常工作,则需要在
工作表\u Change
事件中修改扫描范围内的范围
代码
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("B11:F10000"), Target) Is Nothing Then
Change Target.Row ' call change and pass the row number
End If
End Sub
子变更(i长度相同)
'直接从工作表\u更改事件获取行号
如果(单元格(i,“B”)+单元格(i,“D”))单元格(i,“F”),则
MsgBox“B”&i&“+D”&i&“必须等于单元格F”&i&”,即:“&Range”(“W”&i).Value
单元格(i,“B”).Interior.Color=RGB(255,0,0)
单元格(i,“D”).Interior.Color=RGB(255,0,0)
其他的
范围(单元格(i,“B”)、单元格(i,“D”))。Interior.Color=RGB(100010001000)
如果结束
端接头
请重新开始,确保事件处理程序正常工作。将此添加到空工作表中以重试
Public Sub Worksheet_Change(ByVal Target As Range)
MsgBox "You just changed " & Target.Address
End Sub
请注意,此事件处理程序必须驻留在此工作表的专用模块中:
更多信息请点击此处:
这是评论中的一个错误。代码应从“B11”开始工作。因此,我将数据写入单元格“B11”,即10。如果我在之后按Enter键,它将转到单元格“B12”,代码不起作用。相反,如果我用我的pad单元格'C11'或'A11'选择,代码会工作,因为我的鼠标停留在11的同一行上。如果我按Enter键,它将转到第12行,代码将不起作用。我很确定这和ActiveCell.行有关function@georgec不确定当您写入“我将数据写入单元格‘B11’即10”时,10是多少?当我在单元格“B11”中键入时,上面的代码起作用。你能解释一下吗?修好了。现在没问题。再次感谢:)是的。我做到了:)
Sub Change(i As Long)
' get the row number directly from the worksheet_change event
If (Cells(i, "B") + Cells(i, "D")) <> Cells(i, "F") Then
MsgBox "B" & i & " + D" & i & " must equal cell F" & i & " which is: " & Range("W" & i).Value
Cells(i, "B").Interior.Color = RGB(255, 0, 0)
Cells(i, "D").Interior.Color = RGB(255, 0, 0)
Else
Range(Cells(i, "B"), Cells(i, "D")).Interior.Color = RGB(1000, 1000, 1000)
End If
End Sub
Public Sub Worksheet_Change(ByVal Target As Range)
MsgBox "You just changed " & Target.Address
End Sub