嗨我有下面的代碼爲成千上萬的單元格觸發。它爲每個單元格添加一個驗證列表(列表值是在名稱範圍內定義的 - 名稱範圍位於單獨的選項卡中)。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錯誤。發生這種情況時,它會停止在第一個單元中,需要爲任何數據集添加驗證。就好像它在這一點上打破了工作表。
錯誤發生在哪條線上? – 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