【问题标题】:Excel VBA: Validating a cell's value after changing itExcel VBA:更改单元格后验证单元格的值
【发布时间】:2012-04-17 23:53:20
【问题描述】:

我有一个函数,可以在用户将一个单元格更改为某个值后将一系列单元格更新为某个值。但是,此范围内的单元格不共享相同的验证范围,因此我想对每个更新的单元格进行单独验证。

这是我目前所拥有的。对于每个单元格,数据验证设置为具有可接受值的自己的验证范围。由于某种原因,即使数据不在验证范围内,验证仍然成立。我不太确定 validation.value 属性是如何工作的..

For index = 1 to UBound(someArray)
    wksSomeSheet.Cells(index, column).Value = requiredValue
    If Not wksSomeSheet.Cells(index, column).Validation.Value Then
        MsgBox "A value is not supported for one the cells."
        Exit For
    End If
Next

或者我应该实现它以便我使用Range("validationRange").find(requiredValue) 代替?

【问题讨论】:

  • 我认为您正在尝试这样做? siddharthrout.wordpress.com/2012/03/16/…
  • 是的,谢谢,这行得通。我不得不进行一些更改,因为 sub 已经在工作表更改中。您的实现类似于在验证范围内查找值。
  • 我建议您发布最终解决方案,然后接受您的回答 :)

标签: vba excel excel-2007


【解决方案1】:

在查看了 Siddharth 的博客后,我对他的代码进行了一些微小的更改以适应我的需要:

Dim currentValidation As Excel.Validation
wksSomeSheet.Cells(index, Target.Column).Value = requiredValue

Set currentValidation = wksSomeSheet.Cells(index, Target.Column).Validation
If currentValidation.Type = xlValidateList Then
    Dim validationFound As Boolean, MyArray As Variant
    validationFound = False
    MyArray = Application.WorksheetFunction.Transpose(Range(Mid(currentValidation.Formula1, 1)))
    For i = 1 To UBound(MyArray)
        If requiredValue = MyArray(i, 1) Then
            validationFound = True
            Exit For
        End If
    Next

    If Not validationFound Then
        MsgBox wksSomeSheet.Cells(index, wksSomeSheet.Range("myRange").Column).Value & " does not have a valid value."
        Exit For
    End If
End If

【讨论】:

    猜你喜欢
    • 2013-12-26
    • 2020-12-14
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多