为什么重新打开文件后,大型列表的VBA valilation崩溃了?

问题描述 投票:1回答:1

这里的代码正如我预期的那样正常。它从包含257个字符的字符串创建下拉列表,88个项目用逗号分隔。但是,保存文件后,我无法重新打开它。代码(位于excel对象表中,而不是模块中)也会丢失。我非常感谢你的意见。

将88改为87,一切正常。

Sub test_function()
Dim myList As String
myList = "" 

For a = 0 To 88
    myList = myList & CStr(a) & ","
Next a

'for debug
MsgBox Len(myList) & ":" & myList

ThisWorkbook.Application.Sheets("DC_setup").Range("A1:A10").Select

With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=myList
    .IgnoreBlank = True
    .InCellDropdown = True
    .ShowInput = True
    .ShowError = False
End With
End Sub
string vba list validation size
1个回答
0
投票

您的数据验证列表“公式”太长。

您可以使用名称而不是以逗号分隔的值列表来使其变得非常非常短:

  1. 将新工作表添加到工作簿,在单元格A1中键入“值”
  2. 从第2行开始,在A列中添加所有合法值
  3. 从“Home”功能区中选择“Format as table”;出现提示时,请确保该表包含A列中具有值的所有单元格以及标题(应检查“my table has headers”复选框)。
  4. 从“表格工具”功能区中,更改表格的名称,例如tblLegalValues
  5. 从“公式”功能区中,打开名称管理器,然后单击“新建”按钮。
  6. 定义工作簿范围的名称 - 例如调用它legalValues,指的是=tblLegalValues[Values]
  7. 制作数据验证列表=legalValues
  8. (可选)隐藏工作表

现在,您不仅可以获得所需的所有值而不会出现任何问题,如果您在tblLegalValues表中添加或删除值,您的数据验证会自动更新!


如果您的数据验证列表实际上只是0到88之间的整数,那么您不需要任何列表;将验证类型更改为xlValidateWholeNumber,保留xlBetween运算符,并生成Formula1=0Formula2=88

© www.soinside.com 2019 - 2024. All rights reserved.