2017-04-17 101 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