自动下拉式列表在下次打开文件时会导致无法阅读的内容

我的老板只是要求我在Excel 2010文件中创build自动下拉列表,跟随每个单元格的内容。 到目前为止,我已经写了下面的代码:

Public Const vers = "Version, Actual 2016, Actual 2015,Budget 2017, Budget 2016, Budget 2015, LE3 2016, LE2 2016" Public Const perio = "Period, YTD January N, YTD February N, YTD March N, YTD April N, YTD May N, YTD June N, YTD July N, YTD August N, YTD September N, YTD October N, YTD November N, YTD December N" Sub MBforall() Set allinfo = Range("a1", Range("a1").SpecialCells(xlCellTypeLastCell)) On Error GoTo alinea Set listesval = allinfo.SpecialCells(xlCellTypeAllValidation) If Not listesval Is Nothing Then listesval.Validation.Delete GoTo endlinea End If alinea: Set textesall = allinfo.SpecialCells(xlCellTypeConstants, 2) textesall.EntireColumn.AutoFit Dim clsMB(11) As String clsMB(0) = vers clsMB(1) = perio For Each cell In textesall For i = 0 To 10 Dim strMB As String strMB = clsMB(i) If InStr(1, strMB, LTrim(cell.Value)) > 0 Then With cell.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=strMB .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End If Next Next cell endlinea: End Sub 

至less它是有效的,它正是我想要的。

但是,当我closures一个刚刚使用这个macros的文件时,下次打开它时,我会得到:

Excel遇到了一些不可读的内容,你想恢复它吗?

当我说是的时候,Excel似乎只是修复了我的文件的旧版本,删除了所有以前的修改。 如果我说不,它不会打开文件。

有没有办法解决这个不可读的内容之前,我保存并closures文件,如果可能的话不删除下拉列表?

最后,我find了自己的问题的答案!

我的问题来自我打算创build的string的长度:stringtypes的variables不应该超过255个字符长度 ! 从那以后,我缩短了琴弦,一切都很完美。 我很欣赏你的意图Hrothgar。

希望它能帮助下一代…