2017-04-17 34 views
0

我是VBA的新手。我在舊項目中使用VBA excel宏編碼(使用VBA的Excel驗證下拉列表)。當下拉去 到列表我正在和error.The下拉數據的最大數量是由另一片Excel驗證在VBA中下拉長度問題

下面收集是截圖

enter image description here

enter image description here

Public Sub CORE_SetValidation(ByRef Rng As Range, ByVal Value As String) 
    With Rng.Validation 
     Call .Delete 
     If Value <> "" Then 
      Call .Add(Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Value) 
      .ErrorMessage = "Please select a value from drop-down list" 
      .ErrorTitle = "Value Error" 
      .IgnoreBlank = True 
      .InCellDropdown = True 
      .InputMessage = "" 
      .InputTitle = "" 
      .ShowInput = True 
      .ShowError = True 
     End If 
    End With 
End Sub 
  1. VBA下拉列表中的字符或下拉列表是否有任何限制,因爲從錯誤消息我無法知道譴責這個問題。
  2. 我能否得到確切的錯誤信息。
+0

請複製並粘貼您的代碼作爲文本使其你的問題的一部分。 –

+0

@RichHolton我已添加我的編碼 – ManiMuthuPandi

+0

語法註釋:'Call'已棄用且不必要。只需使用'.Delete'和'.Add類型:= xlValidateList,AlertStyle:= xlValidAlertStop,Formula1:= Value' – ThunderFrame

回答

1

而不是使用包含由逗號分隔的驗證值列表的字符串,而是使用指定存儲列表的範圍的字符串。例如,如果您的驗證列表存儲在A列中的工作表「ValidationValues」從第2行到1001,你的字符串應該是這樣的:

"=ValidationValues!A2:A1001" 

每個驗證值必須是在其自己的工作表單元格。

然後,您可以到CORE_SetValidation子通過這個字符串:

Call CORE_SetValidation(myRange, "=ValidationValues!A2:A1001") 
+0

我可以從工作表「ValidationValues」動態獲取總行數值,以形成上述驗證 – ManiMuthuPandi

+0

是的,方法。在這裏看例子:http://stackoverflow.com/questions/71180/how-can-i-find-last-row-that-c​​ontains-data-in-the-excel-sheet-with-a-macro –

+0

偉大;你的答案和評論爲我提供了很好的解決方案。但在保存文件後,我正在關閉它。然後,當我重新打開保存的文件時,會出現此錯誤**「文件錯誤:數據可能已丟失。」** – ManiMuthuPandi