VBA - 启用和禁用验证

时间:2017-11-16 08:32:55

标签: excel vba excel-vba validation

我想问一下有没有办法在Excel上启用和禁用数据验证?我想禁用某些输入的验证,'其他'。如果输入不是其他输入,则启用它。

我有一个列表数据验证,当选项cell== others时,用户可以释放文本。否则禁用自由文本。

我的列表验证是通过数据验证中的excel构建完成的,而不是使用VBA。

这是我尝试过的代码:

Sub Remove_Data_Validation_Selection()

Selection.Validation.Delete

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Cells(2, 6).Value = "Others" Then
            Selection.Validation.Delete
    Else
           //Enable the validation
    End If
End Sub

现在,当选择“其他”时,验证将被删除。我该如何启用它?当Selection.Validation.Delete删除对象时,我能够将其启用吗?

2 个答案:

答案 0 :(得分:2)

如果要在同一过程中使用它,请声明对象变量

Dim Valid As Validation

并在删除前指定值。在这里编辑。

If Cells(2, 6).Value = "Others" Then
        set Valid = Selection.Validation
        Selection.Validation.Delete

如果您想在其他程序中设置验证:

SomeRange.Validation = valid

我不知道你为什么会这样做,但这是你问题的答案。但是,如果要保留其他过程的验证,可以这样做:

Dim wsHid As Worksheet
Dim rngValid As Range

Set rngValid = Selection
Set wsHid = ThisWorkbook.Worksheets.Add
wsHid.Visible = xlSheetVeryHidden
rngValid.Copy
wsHid.Range("A1").PasteSpecial Paste:=xlPasteValidation

然后,如果您需要重新创建验证,只需从wsHid.Range(" A1")和PasteSpecial Paste:xlPasteValidation复制它。当然,这只是一堆想法,你应该根据你的代码进行调整。

答案 1 :(得分:1)

这正是我正在寻找的,当用户选择其他时,它将修改验证设置。如果要删除验证,可以将修改更改为删除。

isUnloaded()