更新Excel VBA中的目标单元格的值

我试图使用VBAmacros,当它存在特定的范围内更新目标单元格的值。 我想通过串联一个string来更新它的值。 例如,如果某些人在目标单元格中​​写入250,我想将“XYZ-250”写回到目标单元格中​​。 以下是代码:

Dim oldCellAddress As String Dim oldCellValue As String Private Sub Worksheet_Change(ByVal Target As Range) oldCellValue = 0 If Not Intersect(Target, Range("E10:E500")) Is Nothing Then oldCellValue = Target.Value Sheet1.Cells(Target.Row, Target.Column).Value = "AST-" & oldCellValue End If End Sub 

有趣的是,当我改变范围内的任何单元格的值(E10到E500)时,消息框会显示无限的时间并暂停excel,我必须重新启动它。

提前致谢

在进行任何将触发Change事件的Change之前禁用事件:

 Dim oldCellAddress As String Dim oldCellValue As String Private Sub Worksheet_Change(ByVal Target As Range) oldCellValue = 0 If Not Intersect(Target, Range("E10:E500")) Is Nothing Then Application.EnableEvents = False oldCellValue = Target.Value Target.Value = "AST-" & oldCellValue Application.EnableEvents = True End If End Sub 

如果事件未被禁用,则对单元格的更改将触发Worksheet_Change事件,该事件将更改单元格,这将触发Worksheet_Change事件,这将更改单元格,这将触发Worksheet_Change事件,这将更改单元格,这将触发Worksheet_Change事件,这将改变单元格,这将触发…


假设你不需要oldCellValueoldCellAddress模块范围variables,但是想要处理对多个单元格的更改,请改用它:

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("E10:E500")) Is Nothing Then Dim c As Range Application.EnableEvents = False For Each c In Intersect(Target, Range("E10:E500")).Cells c.Value = "AST-" & c.Value Next Application.EnableEvents = True End If End Sub