将时间戳添加到包含嵌套IF语句的单元格中,每次用户窗体工作表打开时,它们都不会更改

时间:2018-11-30 17:17:59

标签: excel vba excel-formula timestamp excel-2016

每次打开从Excel用户窗体派生的工作表时,我都很难获得时间戳以保持静态(不变)。目标是让C列中的单元格提供由G列中的信息确定的前缀和时间戳mmddyyhhmm(例如C106CS1130181200)。

当前,在“ Sheet1”中,我有A-G列试图解决此问题。

A列公式:

=IF(SurvData!G2="Confined Space Surveillance","C106CS",IF(SurvData!G2="Asbestos Surveillance","C106AP",IF(SurvData!G2="Electrical Frisking","C106EF",IF(SurvData!G2="Fall Protection Surveillance","C106FP",IF(SurvData!G2="Hearing Conservation","C106HC",IF(SurvData!G2="Tracked HM Storage Location","C106HM",IF(SurvData!G2="Hot Work Surveillance","C106HW",IF(SurvData!G2="Hexavalent Chromium","C106HX",IF(SurvData!G2="Hazard Communication","C106HZ",IF(SurvData!G2="Job Safety Analysis","C106JSA",IF(SurvData!G2="Lockout/Tagout Plus","C106LT",IF(SurvData!G2="Operational/Out of Service","C106OOS",IF(SurvData!G2="Lead Surveillance","C106PB",IF(SurvData!G2="Personal Protection Equip","C106PPE",IF(SurvData!G2="Respiratory Protection Surveillance","C106RP",IF(SurvData!G2="Shop Safety Surveillance","C106SI",IF(SurvData!G2="Ship Safety Surveillance","C106SS","")))))))))))))))))

B列公式:与A列相同

C列公式: =IF(B2="","",timestamp())

D列公式: =IF(AND(SurvData!C2<>"",SurvData!G2<>""),Sheet1!B2&C2,SurvData!C2)

F列公式: =CONCATENATE(A2,C2)

标记为SurvData的C列工作单元的工作表包含一个公式,该公式可从F列Sheets1获得序列ID的结果。无论我做什么努力,打开SurvData工作表时时间戳似乎都会改变。

有没有一种方法可以在Worksheet Change事件中编写VBA,从而使我可以将上面的嵌套IF()语句与时间戳结合起来并使其保持静态(不变)?

1 个答案:

答案 0 :(得分:0)

有两种方法可以实现此目的。首先是使用时间戳公式。

这将起作用:

=IF(TargetCell<>"",IF(TimestampCell<>"",TimestampCell,NOW()),"")

为此,您需要启用循环引用。为此,请转到excel->公式->选中“启用迭代计算”框。 一旦目标单元被更改,这将在单元中创建时间戳。但是,我强烈敦促您在工作表中创建一个单元格,并使其包含公式=NOW(),并具有需要当前时间引用该单元格的所有其他公式。

创建一个字符串列表,以及可能出现在G列中的条目。在单独的工作表中执行此操作。然后在其旁边添加字符串表示的代码列表。做VLOOKUP或做INDEX/MATCH并拉出答案。类似于=INDEX('NewLookupSheet'!$A$1:$B$17,MATCH('SurvData'!G2,'NewLookupSheet'!$A$2:$A$17,0),2)

要提供VBA解决方案,我需要更多信息来编辑它并更新答案。就目前而言,没有明确的VBA解决方案可以提供伪代码以外的其他解决方案,因为没有明确的信息来说明已经尝试过的内容或VBA试图与公式解决方案有所不同的内容。