我的Excel文件包含很少的宏用于验证。日期列需要在开始/结束日期范围内。为了实现这一点,当数据被拉出以创建具有每行的有效日期的动态列表时,存在宏运行。此解决方案适用于Excel 07。
最近我们升级到了2016年,文件出现错误"我们发现某些内容有问题,您想要恢复吗?"每次文件打开时。当我说是,它恢复了文件。所有数据都完好无损,但为日期创建的数据验证将被破坏。而不是值,源显示为#NA。
基于excel列表完成的所有数据验证保持不变,但不是通过VBA创建的。
以下是保存文件前的屏幕截图
以下是excel在重新打开时修复文件的方式。
我试图寻找可能的解决方案,并且没有找到与之相关的讨论。任何人都可以有评论/可能的解决方案如何处理这个问题。
我至少有10种不同的验证,所以找到将表单保存在formuala中的方法将是最好的解决方案而不是为文件中的每个验证重新创建整个逻辑。这是生成日期的代码,这是< / p>
Sub Calculate_EOP_validation(FirstRow, LastRow)
If Sheets("Planning file").Range("C" & FirstRow).Value = 0 Then
Exit Sub
End If
oldVS = DateSerial(0, 1, 1)
oldVE = DateSerial(0, 1, 1)
vCol = Mid(Sheets("Planning file").Range("PartEOP").Address, 2, 2)
For row = FirstRow To LastRow
VehSOP = Sheets("Planning file").Range("P" & row).Value
VehEOP = Sheets("Planning file").Range("Q" & row).Value
If IsDate(VehSOP) And IsDate(VehEOP) Then
If VehSOP = oldVS And VehEOP = oldVE Then
ValidDatesList = OldVDL
Else
Valid_date = VehSOP
ValidDatesList = DateSerial(Year(Valid_date), Month(Valid_date) + 1, 1) - 1
Do Until Valid_date > VehEOP
Valid_date = DateSerial(Year(Valid_date), Month(Valid_date) + 2, 1) - 1
If Valid_date <= VehEOP Then
ValidDatesList = ValidDatesList & "," & Valid_date
End If
Loop
OldVDL = ValidDatesList
End If
With Sheets("Planning file").Range(vCol & row).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=ValidDatesList
.ErrorTitle = "Wrong date entered."
.ErrorMessage = "Please use drop-down list to select proper date."
End With
oldVS = VehSOP
oldVE = VehEOP
End If
接着 结束子