【发布时间】: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,我无法重现您的问题。抱歉,我认为您应该在宏之外查看其他内容....也许检查您是否有很多样式或自定义格式?我到了。抱歉,我没有别的了。