【问题标题】:Automatic drop-down list causes unreadable content at next opening of the file自动下拉列表导致下次打开文件时内容不可读
【发布时间】:2016-09-27 16:19:39
【问题描述】:

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

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

【问题讨论】:

  • 我把你的代码放到了一个新的工作簿中。将一些文本放在 A 列中,选择文本并运行宏。我最终得到了一组单元格,其中包含相同的选择列表。设计意图,对吧?然后我保存并关闭文件,重新打开它,并且没有错误消息。验证规则仍然存在。没有不可读的内容。抱歉,我无法重现您的问题。该代码有效。也许您引用了另一个损坏的文件?
  • 您好,感谢您的回复。只要我不启动宏,我很确定文件没有损坏。我想知道它是否可能来自文件扩展名或 Excel 版本。否则它可能来自设置。但是问题仍然有可能来自宏,因为当我手动构建下拉列表时,当我关闭并重新打开文件时它没有问题。
  • 我的意思是,您是否有对可能已损坏的库或其他工作簿的引用(在 VBA 编辑器中,在工具、引用下)?我又试了一次;将其保存为 .xls、.xlsm 和 .xlsb,我无法重现您的问题。抱歉,我认为您应该在宏之外查看其他内容....也许检查您是否有很多样式或自定义格式?我到了。抱歉,我没有别的了。

标签: vba excel dropdown


【解决方案1】:

终于,我找到了自己问题的答案!

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

希望对后代有所帮助...

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你应该在评论中写短句。
    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2019-05-14
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    相关资源
    最近更新 更多