こんにちは私は何千ものセルに対してトリガーされる次のコードを持っています。各セルに検証リストを追加します(リスト値は名前の範囲で定義されます-名前の範囲は別のタブにあります)。
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で停止することがあります。
最初の失敗の直後に2回実行すると、検証が必要な最初のセルで停止し、1004エラーが表示されることがあります。これが発生すると、最初のセルで停止し、データセットの検証を追加する必要があります。この時点でワークシートが壊れているようです。