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

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

我的老板刚要求我在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似乎只是恢复我的文件的旧版本,删除所有以前的修改。如果我说不,它不会打开文件。

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

excel vba excel-vba dropdown
2个回答
0
投票

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

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

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


0
投票

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

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