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

时间:2016-09-27 16:19:40

标签: excel vba excel-vba dropdown

我的老板刚要求我按照每个单元格的内容在Excel 2010文件中创建自动下拉列表。到目前为止,我已经编写了以下代码:

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

至少它是有效的,它完全符合我的要求。

然而,当我关闭一个我刚刚使用过该宏的文件时,下次打开它时我会得到:

  

Excel遇到了一些不可读的内容,你想要它吗?   回收

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

在我保存并关闭文件而不删除下拉列表(如果可能)之前,有没有办法修复这个不可读的内容?

2 个答案:

答案 0 :(得分:0)

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

我的问题来自我打算创建的字符串的长度:String类型的变量不应超过 255个字符长度! 从那以后,我缩短了弦乐,一切都很完美。我很欣赏你的意图Hrothgar。

希望它可以帮助后代...

答案 1 :(得分:0)

这是正确的,但是当字符串必须超过255个字符时我们该怎么做,因为代码允许你这样做。或许将其写入工作表并使用vba引用它可能有效