1

こんにちは私は何千ものセルに対してトリガーされる次のコードを持っています。各セルに検証リストを追加します(リスト値は名前の範囲で定義されます-名前の範囲は別のタブにあります)。

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

セルをループする別の関数からサブルーチンを呼び出します。注totalColstotalRowsは他の場所で設定されますが、データ範囲の境界です。

    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エラーが表示されることがあります。これが発生すると、最初のセルで停止し、データセットの検証を追加する必要があります。この時点でワークシートが壊れているようです。

4

1 に答える 1

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
于 2013-03-22T01:30:01.827 に答える