首页 > 解决方案 > Excel 数据验证在特定单元格上失败,并且每次保存时都会损坏文件

问题描述

所以我很难说出这个问题,但它难倒我。我的工作表上有多个包含数据验证列表的单元格。有三个不同的列表,两个在单个单元格中,一个在一系列单元格中。所有这些都通过一些代码填充,该代码提取 JSON 格式的字符串,将其放入对象中,遍历键/值对并将值放入列表中(全部在 VBA 中完成)。

单个单元格之一和单元格范围的行为与其应有的行为一样,并在关闭工作簿后保持列表/下拉列表。第二个单个单元格每次都返回空,Excel 打开以下错误:

“我们发现 'YourWorkbook.xlsb' 中的某些内容存在问题。您希望我们尽可能多地恢复吗?”

其次是:

“修复的记录:来自 /xl/worksheets/sheet2.bin 部分的公式”。

然后它有一个带有数据验证下拉箭头的单元格,但没有列表。可以肯定的是,我的整个工作簿中没有公式,所以我对“来自 sheet2.bin 的公式”部分感到困惑。

我能想到的唯一明显的原因是这个列表比其他列表长(但仍然只有 54 个条目,总共 414 个字符)。

有没有人有一个很好的方法来规避/原因发生这种情况?我不想将列表存储在单元格中。

要复制的代码 - 只需添加到一个空工作簿中,另存为 .xlsm 或 .xlsb 并重新打开。

Sub ValidTest()
Dim A, x%, y%, z%

For x = 1 To 3
    For y = 1 To 25
        For z = 1 To 10
            A = A & x + y
        Next z
        A = A & ","
    Next y
Next x

Sheet1.[A1].Validation.Delete
Sheet1.[A1].Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=A
Sheet1.[A1].Validation.IgnoreBlank = True
Sheet1.[A1].Validation.InCellDropdown = True

A = ""

For x = 65 To 75
    For y = 1 To 5
        A = A & Chr(x)
    Next y
    A = A & ","
Next x

Sheet1.[B1].Validation.Delete
Sheet1.[B1].Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=A
Sheet1.[B1].Validation.IgnoreBlank = True
Sheet1.[B1].Validation.InCellDropdown = True

Sheet1.Range("C1:C5").Validation.Delete
Sheet1.Range("C1:C5").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=A
Sheet1.Range("C1:C5").Validation.IgnoreBlank = True
Sheet1.Range("C1:C5").Validation.InCellDropdown = True

End Sub

ps - 这是在 Excel 2016 中,32 位

标签: excellistvalidation

解决方案


推荐阅读