使用 VBA 输入特定文本时更改单元格中的值

使用 VBA 输入特定文本时更改单元格中的值

我尝试修改此代码但我遇到了一些问题。每次我尝试在单元格中输入文本时,它都会更改前一个单元格。

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Target.Worksheet.Range("D3:D300")) Is Nothing Then
    Application.EnableEvents = False 'Disables events to prevent endless loop

    On Error GoTo Finalise 'Re-enable events

    inputVal = Range("D3:D300").Value

    newValue = "=VLOOKUP(E3,$Q$2:$R$150,2,0)"

    Range("D3:D300").Value = newValue
End If

Finalise:
    Application.EnableEvents = True
End Sub

表格1

表2

代码可以运行,并且它将同一单元格中的数字 44 更改为名称“Guy2”,但是当我转到下一行并尝试输入新值时,它会删除前一个值。有人可以告诉我如何使我的新值保留在单元格中,即使我在下一行输入了新值?

谢谢

答案1

通过在 D3 中放置公式,您正在创建循环引用。在 vba 中执行查找并仅返回值:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Me.Range("D3:D300")) Is Nothing Then
    Application.EnableEvents = False 'Disables events to prevent endless loop

    On Error GoTo Finalise 'Re-enable events

    Target.Value = Application.VLookup(Target.Value, Me.Range("Q:R"), 2, False)
End If

Finalise:
    Application.EnableEvents = True
End Sub

相关内容