Vba excel停止基于时间的单元格表单更新

Vba excel停止基于时间的单元格表单更新,vba,excel,time,Vba,Excel,Time,我有一个表格,根据满满一手的标准计算出每小时的预计件数。随着时间的推移,用户正在将信息输入到“实际件数”列中。当标准(位于图纸的其他位置)更改时,整个“预期碎片”列将更新。该表如下所示: 我试图这样做,如果当前时间在第一列中的时间之后,则“预期碎片”列将不会更新,并将保留以前的值。例如,如果在8:30时预期的片段为20,则在变为9:00后,8:00和7:00行将保留其预期片段值,而列的其余部分将随着条件的更改而更新 我一辈子都想不出如何做到这一点。是否可以在前端执行此操作,或者我是否应该编写一

我有一个表格,根据满满一手的标准计算出每小时的预计件数。随着时间的推移,用户正在将信息输入到“实际件数”列中。当标准(位于图纸的其他位置)更改时,整个“预期碎片”列将更新。该表如下所示:

我试图这样做,如果当前时间在第一列中的时间之后,则“预期碎片”列将不会更新,并将保留以前的值。例如,如果在8:30时预期的片段为20,则在变为9:00后,8:00和7:00行将保留其预期片段值,而列的其余部分将随着条件的更改而更新

我一辈子都想不出如何做到这一点。是否可以在前端执行此操作,或者我是否应该编写一些VBA代码来控制此操作


我应该如何处理这个问题?谢谢大家!

这必须用VBA编码

由于“下拉单元格”中的值将发生更改,因此简单的Excel公式无法存储或访问其以前的状态

然而,人们可以想象一些相当丑陋的解决方法,每个时间段都有一组不同的“下拉单元格”

一些VBA建议:

1) 禁用自动计算

Private Sub Workbook_Open()
  Application.Calculation = xlCalculateManual
End Sub
然后仅重新计算满足条件的单元格:

Sub foo()
  If myCriterion Then
    Range("B3:D7").Calculate
  End If
End Sub
2) 如果满足条件,请将公式替换为其当前结果

Private Sub Worksheet_Change(ByVal Target as Range) 
  If myCriterion Then
    Range("B3").Value = Range("B3").Value
  End If        
End Sub
请注意,如果要在第2天使用相同的工作表,则必须恢复这些单元格的先前“公式”版本


请记住用户交互。您可能应该阻止用户输入某些单元格,以防止出现不希望出现的效果。

以下方法的问题是书本必须打开;但是您可以使用application.OnTime方法根据时间剪切和粘贴值(每小时在小时上一次复制一个单元格的粘贴值)。你必须在单元格中有一个公式来计算它们。这听起来像是我用这句话向正确的方向发展,还是我没有抓住重点?

当前“预期碎片”是如何更新的?@tompreston有几个下拉单元格,根据这些单元格中的内容计算预期碎片。没有任何代码可以简单地冻结预期碎片单元格吗?如中所示,在重置工作表之前保持该值?您可以禁用计算,但这会影响整个工作表。我猜无论如何,你都需要VBA来重新计算你想要更新的单元格;对但这是VBA代码,而不是任何Excel公式。我比较喜欢编写VBA代码,所以如果我描述的内容存在,我想这样做。将使用什么样的命令来防止单元格基于criteria@Vbasic4now我补充了一些建议,我想你误解了@乌利·施密德(Ulli Schmid)走上了正确的道路,但我需要进一步发展这个想法