4

検証を動的に作成していますが、256 文字の制限に達しました。私の検証は次のようになります。

Level 1, Level 2, Level 3, Level 4.....

範囲を指す以外に文字制限を回避する方法はありますか?

検証はすでに VBA で作成されています。制限を増やすことは、シートの現在の動作への影響を回避する最も簡単な方法です。

4

1 に答える 1

6

256 文字の制限を回避する方法はないと確信しています。Joel Spolsky がその理由をhttp://www.joelonsoftware.com/printerFriendly/articles/fog0000000319.htmlで説明しています。

ただし、Worksheet_Change イベントをコーディングすることにより、VBA を使用して、組み込みの検証機能の複製に近づけることができます。これは、アイデアを提供するためのモックアップです。おそらく、ValidValues をキャッシュしたり、セル範囲の変更を処理したりするためにリファクタリングする必要があるでしょう...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ValidationRange As Excel.Range
Dim ValidValues(1 To 100) As String
Dim Index As Integer
Dim Valid As Boolean
Dim Msg As String
Dim WhatToDo As VbMsgBoxResult

    'Initialise ValidationRange
    Set ValidationRange = Sheet1.Range("A:A")

    ' Check if change is in a cell we need to validate
    If Not Intersect(Target, ValidationRange) Is Nothing Then

        ' Populate ValidValues array
        For Index = 1 To 100
            ValidValues(Index) = "Level " & Index
        Next

        ' do the validation, permit blank values
        If IsEmpty(Target) Then
            Valid = True
        Else
            Valid = False
            For Index = 1 To 100
                If Target.Value = ValidValues(Index) Then
                    ' found match to valid value
                    Valid = True
                    Exit For
                End If
            Next
        End If

        If Not Valid Then

            Target.Select

            ' tell user value isn't valid
            Msg = _
                "The value you entered is not valid" & vbCrLf & vbCrLf & _
                "A user has restricted values that can be entered into this cell."

            WhatToDo = MsgBox(Msg, vbRetryCancel + vbCritical, "Microsoft Excel")

            Target.Value = ""

            If WhatToDo = vbRetry Then
                Application.SendKeys "{F2}"
            End If

        End If

    End If

End Sub
于 2008-09-19T20:23:03.667 に答える