2013-03-21 130 views
1

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

+0

错误发生在哪条线上? – NickSlash 2013-03-21 23:06:25

+0

Validation.Add行失败 – user559142 2013-03-21 23:10:42

+0

您可以向'createlist'添加一个计数器来查看成功应用“DV”的单元数量?并测试你的几个数据集。 – NickSlash 2013-03-21 23:21:34

回答

1
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 
+0

的机制的一个问题。不幸的是,这在Add行上产生了1004。尝试向第一个单元添加验证时它会停止。 – user559142 2013-03-22 01:59:01

+0

编辑我的答案 - 问题是在调用GetRange()' – 2013-03-22 03:42:31

+0

我已经修改,因为excel抱怨 – user559142 2013-03-22 09:48:04

相关问题