Excel 发现无法读取的内容 - 数据验证

标签 excel vba

我有一些组合框,我在打开工作簿时填充 - 数据源来自数据库。

我使用以下代码使用数据验证填充我的组合框:-

  With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=list
    .IgnoreBlank = False
    .InCellDropdown = True
    .ShowInput = True
    .ShowError = True
  End With

其中 list 是我从数据库记录集中构建的逗号分隔字符串。

这一切都很好。稍后我重新打开工作簿时会出现问题。我收到一个错误

“Excel 发现无法读取的内容。是否要恢复此文件的内容”

你说是,然后 Excel 给你

“Excel 能够通过删除功能来修复文件”

并且来自某些组合框的数据验证消失了

我从一些互联网搜索中怀疑我用于数据验证的字符串太长?

将记录集值添加到隐藏表并将数据验证源设置为隐藏表上的范围对我来说不是一个选项,因为组合框是动态的,并且会根据用户选择进行更改和更改。我真的只需要能够将数据验证设置为我在用户交互的各个点建立的字符串。

如果是字符串太长的情况,是否可以附加到数据验证,或者我可以使用另一个技巧来解决这个问题?

最佳答案

我之前在一些 Excel 项目中操作过验证列表。当您将验证设置为允许:列表时,您可以将数据源设置为工作簿级别的命名范围。在这个例子中,我定义了一个命名范围“listrange”:

With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=listrange"
    .IgnoreBlank = True
    .InCellDropdown = True
    .ShowInput = True
    .ShowError = True
End With

你永远不会因为公式字符串太长而出错。

我将所有验证引用的命名范围放在一个工作表中,并将其隐藏。然后我的代码操作这些命名范围,进而更新验证下拉菜单中可用的值。

在更新命名范围时动态更新它们的大小可能很棘手,但使用 VBA 并不太难,尤其是当您从数据库返回集合时,您可以获得记录计数。另一种方法是采用 ActiveX 控件路线,但我喜欢数据验证下拉菜单的干净、原生的外观和感觉。

关于Excel 发现无法读取的内容 - 数据验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17022702/

相关文章:

mysql - 如何将 ms excel-2007 与 mysql 连接。

excel - VBA 饼图图例 - 如何设置图例文本?

Excel VBA 确定 3X3 范围相对于 activeCell 的位置

macos - VBA 在 Windows Excel 上运行,但不能在 Mac Excel 中运行

python - 如何在 xlwt 中编写具有多列的单元格?

excel - 使用 VBA 在 XML 中设置多个命名空间

c - 访问 64 位 DLL 函数时出错

function - excel vba 将 system.collections.hashmap 导入模块

.net - Office 功能区 XML 与 Office 标准功能区设计器?

excel - 在 VBA 中显示 InputBox 对话框时如何滚动窗口?