2016-09-27 53 views
1

我的老闆剛要求我在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只是修復了我的文件的舊版本,刪除了所有先前的修改。如果我說不,它不會打開文件。

有沒有辦法解決這個不可讀的內容之前,我保存並關閉文件,而不刪除下拉列表如果可能?

+0

我把你的代碼到一個新的工作簿。在A列中放入一些文本,選中文本並運行宏。我最終得到一組具有相同選擇列表的單元格。設計意圖,對吧?然後我保存並關閉文件,重新打開它,並沒有錯誤信息。驗證規則仍然存在。沒有無法讀取的內容。對不起,我無法重現您的問題。代碼起作用。也許你有一個腐敗的另一個文件的參考? – Hrothgar

+0

你好,謝謝你的回覆。我很確定只要我不啓動宏,文件就不會被破壞。我想知道它是否可能來自文件擴展名或Excel版本。否則它可能來自設置。但是問題仍然存在,因爲當我手動構建下拉列表時,關閉並重新打開文件時沒有問題。 –

+0

我的意思是,你有沒有參考(在VBA編輯器下,在工具下,參考)到一個圖書館或其他工作簿,可能是腐敗的?我再次嘗試過;保存爲.xls,.xlsm和.xlsb,我無法重現您的問題。對不起,我想你應該在宏觀之外尋找別的東西....也許檢查你是否有很多風格或自定義格式?我到達了。對不起,我什麼也沒有。 – Hrothgar

回答

0

最後,我找到了我自己的問題的答案!

我的問題來自我打算創建的字符串的長度:字符串類型的變量絕不能超過255個字符長度! 從那時起,我縮短了字符串,一切都完美無缺。我很欣賞你的意圖Hrothgar。

希望它可以幫助後代......

0

這是正確的,但我們應該做些什麼時候該字符串有超過255個字符,因爲代碼不會讓你做到這一點。也許寫到一個工作表和使用VBA參考它可能會工作

+0

你應該在評論中寫下簡短的句子。 – Rumit

相關問題