我尝试修改此代码但我遇到了一些问题。每次我尝试在单元格中输入文本时,它都会更改前一个单元格。
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
代码可以运行,并且它将同一单元格中的数字 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