[英]updating value of the Target cell in Excel VBA
我正在嘗試使用VBA宏在特定范圍內存在時更新目標單元格的值。 我想通過將字符串連接到其值來更新其值。 例如,如果有人在目標單元格中寫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
事件的任何更改之前,請禁用事件:
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
事件,這將更改單元格,這將觸發Worksheet_Change
事件,這將更改單元格,從而觸發...
假設您不需要oldCellValue
和oldCellAddress
模塊作用域變量,但希望處理多個單元格的更改,請改用以下方法:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.