VBAvalidation会抛出1004个应用程序定义的错误

嗨,我有以下代码触发数千个单元格。 它为每个单元格添加一个validation列表(列表值是在名称范围内定义的 – 名称范围在单独的选项卡中)。

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 

我从另一个循环遍历单元格的函数调用子程序。 注意totalColstotalRow在别处被设置,但是是数据范围的边界:

  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.这里的特殊情况是不同的数据集的不同点。 数据集越大,格式的列越less。 对于小数据集(即1/2行),它可以在所有范围内循环,并相应地添加列表。

更多信息:数据表未locking。 debugging时, rng具有正确的值。 在debugging模式下执行“添加监视”并检查范围的范围值属性时,可以确认这一点。 指定的范围在工作簿范围内,但包含在单独的工作表中。

第一次运行相同的数据集时,它总是停在同一个地方。 它在列的中间有时会填充具有正确范围值的单元格,然后以错误1004结束。

在第一次失败后立即第二次运行时 – 有时会在需要validation的第一个单元中停止,并显示1004错误。 发生这种情况时,会停止在第一个单元格中,需要为任何数据集添加validation。 就好像现在打破了工作表一样。

 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