嗨,我有以下代码触发了数千个单元格。它为每个单元格添加一个验证列表(列表值在名称范围中定义 - 名称范围在单独的选项卡中)。
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 错误。发生这种情况时,它会在第一个需要为任何数据集添加验证的单元格中停止。就好像它在这一点上打破了工作表。