VBA验证抛出1004应用程序定义的错误
嗨我有下面的代码为成千上万的单元格触发。它为每个单元格添加一个验证列表(列表值是在名称范围内定义的 - 名称范围位于单独的选项卡中)。VBA验证抛出1004应用程序定义的错误
Sub CreateList(cell As Variant, rng As String)
If rng <> Empty Then
With cell.Validation
.Delete
.Add Type:=xlValidateList, Formula1:="=" & rng
.ShowError = False
End With
End If
End Sub
我从另一个循环通过单元格的函数调用子例程。注意totalCols
& totalRow
s的别处设置,但是数据范围的边界:
For i = 2 To totalRows
For J = 1 To totalCols
CreateList(Worksheets("Data").cells(i, j), GetRange(Worksheets("Data").cells(1, J).Value)
Next
Next
GetRange()采用航向值(存储在“数据”片材的1行),并返回范围名称(存储在同一工作簿中单独的工作表):
Function GetRange(cell As Variant) As String
If cell.Value = "Column One Name" Then
GetRange = "RangeOne"
ElseIf cell.Value = "Column Two Name" Then
GetRange = "RangeTwo"
Else
GetRange = ""
End If
End Sub
当我运行一个应用程序定义的错误1004这里的奇怪的事情是,在不同的数据集的不同点有时失败的代码。数据集越大,其格式的列越少。对于小数据集(即1/2行),它可以工作 - 因为它在所有范围内循环并相应地添加列表。
更多信息:数据表未锁定。调试时,rng
具有正确的值。在调试模式下执行“添加监视”并检查范围的范围值属性时,可以确认这一点。指定的范围在工作簿范围内,但包含在单独的工作表中。
第一次运行相同的数据集时,它总是停在同一个地方。它在列的中间有时会填充具有正确范围值的单元格,然后停在错误1004处。
在第一次失败后立即运行第二次 - 它有时会停止在需要验证的第一个单元格中并显示1004错误。发生这种情况时,它会停止在第一个单元中,需要为任何数据集添加验证。就好像它在这一点上打破了工作表。
Sub ApplyValidation()
Dim c As Range
For Each c In Worksheets("Data").Cells(1, 1).Resize(1, totalCols).Cells
With c.Offset(1, 0).Resize(totalRows - 1, 1).Validation
.Delete
.Add Type:=xlValidateList, Formula1:="=" & GetRange(c)
.ShowError = False
End With
Next c
End Sub
Function GetRange(cell As Variant) As String
If cell.Value = "Column One Name" Then
GetRange = "RangeOne"
ElseIf cell.Value = "Column Two Name" Then
GetRange = "RangeTwo"
Else
GetRange = ""
End If
End Function
的机制的一个问题。不幸的是,这在Add行上产生了1004。尝试向第一个单元添加验证时它会停止。 – user559142 2013-03-22 01:59:01
编辑我的答案 - 问题是在调用GetRange()' – 2013-03-22 03:42:31
我已经修改,因为excel抱怨 – user559142 2013-03-22 09:48:04
错误发生在哪条线上? – NickSlash 2013-03-21 23:06:25
Validation.Add行失败 – user559142 2013-03-21 23:10:42
您可以向'createlist'添加一个计数器来查看成功应用“DV”的单元数量?并测试你的几个数据集。 – NickSlash 2013-03-21 23:21:34