Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在更改VBA之前捕获行号_Vba_Excel - Fatal编程技术网

在更改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
,则代码可以正常工作。但是,如果我在cell
b2
中写入一些内容并按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