我的老闆剛要求我在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列中放入一些文本,選中文本並運行宏。我最終得到一組具有相同選擇列表的單元格。設計意圖,對吧?然後我保存並關閉文件,重新打開它,並沒有錯誤信息。驗證規則仍然存在。沒有無法讀取的內容。對不起,我無法重現您的問題。代碼起作用。也許你有一個腐敗的另一個文件的參考? – Hrothgar
你好,謝謝你的回覆。我很確定只要我不啓動宏,文件就不會被破壞。我想知道它是否可能來自文件擴展名或Excel版本。否則它可能來自設置。但是問題仍然存在,因爲當我手動構建下拉列表時,關閉並重新打開文件時沒有問題。 –
我的意思是,你有沒有參考(在VBA編輯器下,在工具下,參考)到一個圖書館或其他工作簿,可能是腐敗的?我再次嘗試過;保存爲.xls,.xlsm和.xlsb,我無法重現您的問題。對不起,我想你應該在宏觀之外尋找別的東西....也許檢查你是否有很多風格或自定義格式?我到達了。對不起,我什麼也沒有。 – Hrothgar