我正在使用我写的称为“包含”的函数来确定数据列中的条目是否与预定的“可接受”值字典匹配。
Sub Validate_Data()
Dim My_Dictionary As Variant
My_Dictionary = Array("Entry1", "Entry2", "Entry3")
Dim Destination As Range
Set Destination = Range("C2:C10")
For Each cell In Destination
cell.FormulaR1C1 = Contains(My_Dictionary, cell)
Next cell
End Sub
如上所述,当我指定数组的元素时,此代码工作得很好。但是,当我尝试根据this帖子从一系列数据创建数组时,我的函数Contains不再起作用
Sub Validate_Data()
Dim My_Dictionary As Variant
My_Dictionary = Range("A1:A3").Value
Dim Destination As Range
Set Destination = Range("C2:C10")
For Each cell In Destination
cell.FormulaR1C1 = Contains(My_Dictionary, cell)
Next cell
End Sub
也许在一个版本中将其另存为另一种数据类型吗?我无法弄清楚为什么第一个代码行得通,而第二个代码行不通,我宁愿能够从工作表中读取数组,而不是在代码中指定每个元素(它比三个元素长得多)。
答案 0 :(得分:0)
如上所述,从;
创建的数组是二维的。因此,与其访问range
之类的元素,不如访问My_Dictionary(x)
。
要获取一维数组,请在您的列上使用My_Dictionary(x, x)
。
Application.Transpose
。
@bigben是正确的,我立即感到困惑,因为我认为您正在使用Scripting.Dictionary
对象。
我会将其更改为My_Dictionary = Application.Transpose(Range("A1:A3"))
或acceptableValues
之类的名称,以使其更清楚地包含其中的内容。
尽管我会从子名称和变量中remove the underscore来使用您使用的任何名称。这在VBA中有特殊的含义,并可能在以后为您带来错误。