簡體   English   中英

在Excel VBA中更新目標單元格的值

[英]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事件,這將更改單元格,從而觸發...


假設您不需要oldCellValueoldCellAddress模塊作用域變量,但希望處理多個單元格的更改,請改用以下方法:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM