VBA – 启用和禁用validation

我想问是否有一种方法来启用和禁用Excel的数据validation? 我想禁用某个input的validation,“其他”。 如果input不是其他的则启用它。

我有一个列表数据validation,当selectcell== others ,用户可以释放文本。 否则禁用自由文本。

我的列表validation是通过数据validation的Excel构build完成的,而不是使用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 

现在,当select“其他”时,validation将被删除。 我如何启用它? 作为Selection.Validation.Delete删除对象,我将能够启用它回来?

如果您想在相同的过程中使用它,请声明对象variables

 Dim Valid As Validation 

并在删除之前分配值。 在这里编辑。

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

如果你想在其他程序中设置validation:

 SomeRange.Validation = valid 

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

 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 

然后,如果您需要重新创buildvalidation,则只需从wsHid.Range(“A1”)和PasteSpecial Paste:xlPasteValidation中复制validation。 当然,这只是一堆想法,你应该把它调整到你的代码。

这正是我正在寻找的,当用户select其他,它会修改validation设置。 如果要删除validation,可以将修改更改为删除。

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$F$2" Then If Target.Value = "Others" Then With Target.Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween .IgnoreBlank = False .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End End If End If If Target.Address = "$F$2" Then With Target.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="1,2,3,Others" .IgnoreBlank = False .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End If End Sub