Akh*_*ary 1 excel events vba onchange excel-vba
我编写了代码来从URL中提取特定页面的数据.我第一次运行代码时,会将数据从URL提取到单元格C1.
我正处于我想要显示MsgBox每当单元格值更改的位置.
例如:
我第一次运行代码"Happy"被提取到单元格C1.
(单元格值发生变化,因此msgbox"值已更改")
第二次运行代码然后也"Happy"被提取到单元格C1.
(表示没有变化,注意到了)
我第三次运行代码"Sad"并被提取到单元格C1,
所以在这一点上,我想要一个msgbox的单元格更改.
我尝试了下面的代码,但即使在单元格中更改了相同的值,它也会显示msgbox.
例如 - 单元格包含文本"Happy".我"Happy"在单元格中重写并按下回车键,因此尽管单元格中的文本相同,但它显示的单元格的msgbox已更改.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("A1:C10")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
' Display a message when one of the designated cells has been
' changed.
' Place your code here.
MsgBox "Cell " & Target.Address & " has changed."
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
这用于Undo检查单元格的先前值是什么,然后将其与新值进行比较.
这也不是区分大小写的HAPPY = HAPpy.如果您希望它区分大小写,请删除这些strconv函数.
请注意,(任何)这些过程(包括您的过程)将无法对多个单元格一次更改做出正确反应(如粘贴在一系列单元格中),但您可以添加代码来处理,但是您需要按照注释中的说明进行操作线.
但对于单细胞,这将起到诀窍:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range, vNew, vOld
If Target.Cells.Count > 1 Then
MsgBox ("multiple cells changed: " & vbLf & Target.Address)
'to handle multiple cells changing at omce you'll need to loop like:
' dim c as cell
' for each c in Target.Cells
' ... etc
Exit Sub
End If
Set KeyCells = Range("A1:C10") ' cells to watch
If Not Application.Intersect(KeyCells, Target) Is Nothing Then
vNew = Target.Value
Application.EnableEvents = False
Application.Undo
vOld = Target.Value
Target.Value = vNew
Application.EnableEvents = True
'make sure value is different (NOT case sensitive)
If StrConv(vNew, vbLowerCase) <> StrConv(vOld, vbLowerCase) Then
'do something here
MsgBox "Cell " & Target.Address & " changed" & vblf & _
"From: " & vOld & vblf & _
"To: " & vNew
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
Stack Overflow:如何在Excel VBA中获取已更改单元格的旧值?(Ronnie Dickson的回答)
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |