excel根据时间停止更新单元格表单

时间:2016-08-10 12:36:30

标签: excel vba excel-vba time

我有一张表,根据满手的标准计算每小时的预期件数。随着时间的推移,用户将信息输入到实际的片段列中。当标准(位于工作表的其他位置)更改时,整个预期的部分列更新。表格如下:

enter image description here

我正在努力使它如果当前时间在第一列中的时间之后,预期的片段列将不会更新并将保留先前的值。例如,如果在8:30预期的碎片是20,那么在它变为9:00之后,8:00和7:00行将保持其预期的碎片值,而其余的碎片随着标准的变化而更新。

我不能为我的生活弄清楚如何实现这一目标。是可以在前端做,还是应该写一些VBA代码来控制它?

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

2 个答案:

答案 0 :(得分:1)

这必须在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天使用相同的工作表,则必须恢复这些单元格的先前“公式”版本。

请记住用户互动。您应该阻止来自用户输入的一些单元格,以防止产生不良影响。

答案 1 :(得分:0)

以下方法的问题是书必须是开放的;但您可以使用application.OnTime方法根据时间剪切和粘贴值(每小时一小时复制一个单元格的粘贴值)。你必须在单元格中有一个公式来计算它们。这听起来像是用这种方式咆哮着正确的树,还是我错过了这一点?