代码之家  ›  专栏  ›  技术社区  ›  Ben

是否可以增加excel验证下拉框中256个字符的限制?

  •  4
  • Ben  · 技术社区  · 17 年前

    我正在动态创建验证,已达到256个字符的限制。我的验证如下所示:

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

    除了指向一个范围外,还有什么方法可以绕过字符限制吗?

    验证已在VBA中生成。增加限制是避免影响图纸当前工作方式的最简单方法。

    1 回复  |  直到 11 年前
        1
  •  6
  •   Graham    17 年前

    我很确定256个字符的限制是无法绕过的,Joel Spolsky在这里解释了原因: http://www.joelonsoftware.com/printerFriendly/articles/fog0000000319.html .

    但是,您可以使用VBA通过编码工作表更改事件来接近复制内置验证的功能。这里有一个模型来告诉你这个想法。您可能需要对其进行重构以缓存有效值、处理对单元格范围的更改等。。。

    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
    
    推荐文章