我编写了代码来从特定页面的URL中提取数据。
我第一次运行代码时会将数据从URL提取到单元格C1
。
我想在每个单元格值发生变化时显示MsgBox
。
例如:
我第一次运行代码"Happy"
被提取到单元格C1
(单元格值发生变化,因此msgbox“值已更改”)
第二次运行代码然后"Happy"
被提取到单元格C1
(意思是没有变化,注意到了)
第三次运行代码,"Sad"
被提取到单元格C1,
所以在这一点上,我想要一个msgbox的细胞更改。
我尝试了以下代码,但即使在单元格中更改了相同的值,它也会显示msgbox。
例如 - 单元格包含文本"Happy"
。我在单元格中重写"Happy"
并按Enter键,因此尽管单元格中的文本相同,但它显示的单元格的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
答案 0 :(得分:5)
这使用html
来检查单元格的先前值是什么,然后将其与新值进行比较。
这也是不区分大小写,因此Undo
。如果您想它区分大小写,请删除HAPPY = HAPpy
函数。
请注意,(任何)这些程序(包括您的程序)不会对多个单元格一次更改(如粘贴在一系列单元格中)做出正确反应,但您可以添加代码来处理但是你需要在注释掉的行中进行演示。
但是对于单细胞,这将起到作用:
strconv
Stack Overflow:How do I get the old value of a changed cell in Excel VBA?(Ronnie Dickson回答)
答案 1 :(得分:1)
试试这样:
Public PrevValue
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Value <> PrevValue Then
MsgBox ("value changed")
PrevValue = Target.Value
End If
End Sub
以前的值现在存储在全局变量中。当值发生变化时,它首先检查该值是否与前一个值相同。
编辑: 如果每次更改不同的单元格,也可以使用
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
PrevValue = Target.Value
End Sub
在更改之前设置当前选定的单元格的值。
答案 2 :(得分:1)
替换:
If Not Application.Intersect(KeyCells, Range(Target.Address))
使用:
If Not Application.Intersect(KeyCells, Target)