动态验证范围在' 16

时间:2016-12-12 18:00:20

标签: excel vba excel-vba excel-2016

我的Excel文件包含很少的宏用于验证。日期列需要在开始/结束日期范围内。为了实现这一点,当数据被拉出以创建具有每行的有效日期的动态列表时,存在宏运行。此解决方案适用于Excel 07。

最近我们升级到了2016年,文件出现错误"我们发现某些内容有问题,您想要恢复吗?"每次文件打开时。当我说是,它恢复了文件。所有数据都完好无损,但为日期创建的数据验证将被破坏。而不是值,源显示为#NA。

基于excel列表完成的所有数据验证保持不变,但不是通过VBA创建的。

以下是保存文件前的屏幕截图

enter image description here

以下是excel在重新打开时修复文件的方式。

enter image description here

我试图寻找可能的解决方案,并且没有找到与之相关的讨论。任何人都可以有评论/可能的解决方案如何处理这个问题。

我至少有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

接着 结束子

0 个答案:

没有答案