2013-03-21 48 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

相關問題