excel - 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 位
解决方案
推荐阅读
- facebook - 如何检索具有 Facebook 评论插件的自定义页面的 Facebook 评论?
- android - 项目 Xamarin.Android 中的错误
- reporting-services - SSRS 的月份大于数字
- record - Coq 记录类型
- postgresql - 可以在其他之前提交的事务之前提交和序列化事务吗?
- postgresql - 如何在 CloudSQL(Postgres) 中删除空闲连接
- android - 如何在 facebook 上分享当前活动?
- sql - 选择可能是也可能不一定是列中的最大值的最大值
- sql - 将列名分配为表变量中的变量
- kubernetes - Istio 可以将不存在的主机映射到 K8s 上的给定服务吗