首页 > 解决方案 > 计算后如何让单元格继承新值?

问题描述

嘿伙计们,我需要一点帮助。我好久没做excel了,所以我完全生疏了。我目前正在尝试制作一个计算当前员工 PTO 时间并扣除在单元格中添加值后使用的小时数的 Excel 表。

例如

我有一个单元格“C2”,其中包含员工当前可用的 PTO 时间

另一个单元格“D2”作为员工使用 PTO 时间的时间。

和充当“更新值”的单元格“E2”

我最初将“E2”设置为 =C2-D2 以减去当前可用 PTO 值使用的 PTO 时间。

计算完成后,是否可以让“C2”使用新的当前可用 PTO 值继承其值?还是我只需要手动更新值?

谢谢你的帮助!

标签: excel

解决方案


单排解决方案

如果您对VBA解决方案持开放态度,则可以使用Worksheet_Change事件将计算移至后端并避免循环引用。

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("D3")) Is Nothing Then
    If Target.Count = 1 Then

        Application.EnableEvents = False
            Range("C3") = Range("C3") - Range("D3")
            Range("D3").ClearContents   'If you want to reset the Used PTO box after each use
        Application.EnableEvents = True

    End If
End If

End Sub

当您更新Used PTO单元格时,Available PTO计数将相应更新。请注意,这也允许该值变为负数

在此处输入图像描述


动态解决方案

在此处输入图像描述

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo SafeExit

If Not Intersect(Target, Range("D:D")) Is Nothing Then
    If Target.Count = 1 Then

        Application.EnableEvents = False
            Range("C" & Target.Row) = Range("C" & Target.Row) - Range("D" & Target.Row)
            Range("D" & Target.Row).ClearContents
        Application.EnableEvents = True

    End If
End If

Exit Sub

SafeExit:
Application.EnableEvents = True
MsgBox "Last Update NOT Registered", vbCritical, "Error Occured"

End Sub

推荐阅读