VBAvalidation列表错误

我在vba中编程很新。 我需要一些编码帮助,我尝试Google解决scheme后无法find解决scheme。

目前我有一个自定义types称为类别映射。 这个types将被用来包含我想作为vadliation列表选项的项目。 它看起来如下:

Public Type categoryMapping messageKey As Long description As String End Type 

categoryMapping的一个例子是存储性别代码,6000表示Male,6001表示Female。

validation列表的显示由于我已经将它们存储在一个数组中,显示它们并不容易。 我所做的是如下:

 'Validation drop down list for the whole row If Has_Elements(mapping) Then Dim code As String Dim options() As categoryMapping code = "" options = mapping Dim j As Integer For j = LBound(options) To UBound(options) code = code & options(j).messageKey & ": " & options(j).description & "," Next j With Range(Rows(7).Address).Validation 'TODO: Need to refactor .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, _ Formula1:=code .InCellDropdown = True .InputMessage = "Please choose from of the following" .ShowInput = True End With End If 

是否有更容易显示他们,因为我已经把所有的项目显示在一个数组? 我可以直接调用数组吗?

使用单元格从上面的代码可以看出,我使用整行的地址来包含validation列表,因为实际上我想要的是整行,除了包含validation列表的标题单元格。

 With Cells(7,1).Validation 'TODO: Need to refactor .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, _ Formula1:=code .InCellDropdown = True .InputMessage = "Please choose from of the following" .ShowInput = True End With 

我试过使用上面的代码来做,但是失败了。 有什么办法可以去做吗?

结合多个validation删除

由于上面提到的问题,我需要在代码中删除一些列的validation列表,如下所示:

 'Delete the unneccessary validation 'TODO: refactor the code so that write in 1 line Range(Columns(1).Address).Validation.Delete Range(Columns(2).Address).Validation.Delete Range(Columns(3).Address).Validation.Delete Range(Columns(4).Address).Validation.Delete 

是否有一些方法可以将所有删除validation合并到一个语句中?

显示选项的一部分

从上面可以看到,当我的用户从validation列表中select一个选项时,整个string出现。

例如,如果我select“6000:男”和“6001:女”作为选项,我select男性,我希望“6000”出现而不是“6000:男”。 有没有办法做到这一点?

validation数据重新打开后不存在

在生成validation列表后,我closures程序并重新打开,出现一个错误,提示“Excel在'File name.xls'中发现了不可读的内容。是否要恢复此工作簿的内容?如果您信任源的工作簿,单击是。

当我点击是,我的Excel打开,但我所有的validation列表都没有了! 我得到了下面的错误信息。

– error064240_01.xml在文件“file_name”中检测到错误 – 已删除的function:从/xl/worksheets/sheet2.xml.part中进行数据validation

我猜测发生了错误,因为validation列表中的选项没有存储在工作表中,而是存储在程序存储器中,因此当我closures程序时,内存丢失。

如果我的猜测是正确的,有什么办法可以解决这个问题吗? 我正在考虑创build另一个工作表,其中包含validation列表中的所有数据,并让我的单元格validation列表引用它们,但有没有更好的方法将它们存储在同一个工作表中?

不可读的内容是因为您将validation列表存储在内存中的数组中。 只要您closures工作表,该数组超出范围并停止存在。 而不是将其存储在数组中,将列表写入某个工作表中,通常我会创build一个名为列表的新表。

您的单元格的实际validation不会使用VBA。 只要创build一个dynamic的命名范围(使用offset()和counta()来填充列表表单中相关列的validation列表,然后使用VBA代码将上面的数组写入该列( http:// chandoo。 org / wp / 2010/09/13 / dynamic-data-validation-excel / )

至于在validation和下拉菜单中显示不同的文本,这听起来像是比它值得的更麻烦。 是否有可能只调整您的单元格,所以它只显示前4位数字?