我使用以下VBA脚本:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xCount As Long
Dim valueCell As Range
Dim timeStampCell As Range
Dim targetCell As Range
Dim xVal As Long
Application.EnableEvents = False
'''''EDIT''''''
Set targetCell = Range("G15")
Set timeStampCell = Range("R2")
Set valueCell = timeStampCell.Offset(0, 1)
'''''''''''''''
xCount = Cells(ActiveSheet.Rows.Count, valueCell.Column).End(xlUp).Row - 1
If Target.Address = targetCell.Address Then
valueCell.Offset(xCount, 0).Value = targetCell.Value
timeStampCell.Offset(xCount, 0).Value = Date
Else
If valueCell.Offset(Cells(ActiveSheet.Rows.Count, valueCell.Column).End(xlUp).Row - 2, 0).Value <> targetCell.Value Then
valueCell.Offset(xCount, 0).Value = targetCell.Value
timeStampCell.Offset(xCount, 0).Value = Date
End If
End If
Application.EnableEvents = True
End Sub
当我在活动表(数据)中使用它时,它可以正常工作。 实际上,脚本会检查目标值是否发生了更改(使用其他单元格中的公式更新了该值)以及目标值(G15)是否已更改,然后将新值复制到表的第一行中
问题是我需要将表格移动到另一张纸上。 我使用了一个公式,将值从初始工作表的G15复制到新工作表的单元格E1(MonthlyData)中,并将VBA脚本从“数据”移动到“ MonthlyData”。我修改了脚本,如下所示:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xCount As Long
Dim valueCell As Range
Dim timeStampCell As Range
Dim targetCell As Range
Dim xVal As Long
Application.EnableEvents = False
'''''EDIT''''''
Set targetCell = Sheets("MonthlyData").Range("E1")
Set timeStampCell = Sheets("MonthlyData").Range("A2")
Set valueCell = timeStampCell.Offset(0, 1)
'''''''''''''''
xCount = Cells(Sheets("MonthlyData").Rows.Count, valueCell.Column).End(xlUp).Row - 1
If Target.Address = targetCell.Address Then
valueCell.Offset(xCount, 0).Value = targetCell.Value
timeStampCell.Offset(xCount, 0).Value = Date
Else
If valueCell.Offset(Cells(Sheets("MonthlyData").Rows.Count, valueCell.Column).End(xlUp).Row - 2, 0).Value <> targetCell.Value Then
valueCell.Offset(xCount, 0).Value = targetCell.Value
timeStampCell.Offset(xCount, 0).Value = Date
End If
End If
Application.EnableEvents = True
End Sub
现在有问题...如果我手动将E1单元格更新为另一个值,则可以正常工作,如果值E1更改为自动更改工作表(数据)中的值,则将更新MonthlyData中的值E1,但VBA脚本不会更新工作,表中的值未更新...
有人可以帮忙吗?
谢谢
答案 0 :(得分:0)
Worksheet_Change
事件应该不会触发,因为该表中没有变化。只有单元格的值被更改。
最好将“ MonthlyData”的Worksheet_Change
的代码包装在子过程中,并从找到G10的Worksheet_Change
分支中的数据表的if
事件中调用它改变了。
或
在数据表的Worksheet_Change
事件中,只需添加一行即可直接更改MonthlyDatasheet的E1单元格
Sheets("MonthlyData").Range("E1").Value= targetCell.Value
编辑:我尝试使用以下代码放置在Sheet(“ DATA”)Worksheet_Change
事件中触发Sheet(“ MonthlyData”)Worksheet_Change
事件。>
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Sheets("DATA").Range("G10") Then
Sheets("MonthlyData").Range("E1").Value = Sheets("DATA").Range("G10").Value
End If
End Sub
它已成功将G10 (我使用G10代替G15)值添加到E1,并触发了Sheet(“ MonthlyData”)Worksheet_Change
事件。再次使用您的MonthlyData Worksheet_Change事件的完整代码进行检查,并发现它可以正常工作。
答案 1 :(得分:0)
我认为您还需要在数据表上添加代码Worksheet_Change事件。如果Sheets(“ MonthlyData”)。Range(“ E1”)是来自Sheets(“ Data”)。Range(“ A1”)的公式,我以此为例 请将此代码添加到数据表中:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Range("A1") Then
Sheets("MonthlyData").Range("E1").Formula = Sheets("MonthlyData").Range("E1").Formula
End If
End Sub
希望获得帮助。
谢谢。