清除validation后,如何在excel VBA中为单元赋值

所以我的vba函数应该为基于布尔input的单元赋值不同的值。 真正的部分是完美的,但是我被卡住了。 True部分为单元格指定一个下拉列表,False部分将其擦除,并将其值设置为文本“N / A”。 只要我试图改变单元格的值(或任何单元格,使用范围(“..”)。值命令,代码面临错误。

还有其他的方法吗? 提前致谢!

Function sema_list(rng As Range, sema As Boolean) If sema = True Then With rng.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="=arrangement" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End If If sema = False Then rng.Validation.Delete rng.Value = "some text" End If sema_list = "" End Function 

一个函数只能把文本放在它被调用的单元格中,所以你必须使用一个正常的子(可能带有参数)来做这个。 例如

 Sub x() sema_list Range("A1:A2"), False End Sub Sub sema_list(rng As Range, sema As Boolean) If sema = True Then With rng.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="=arrangement" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End If If sema = False Then rng.Validation.Delete rng.Value = "some text" End If End Sub 

我想你必须在分配任何值之前通过一些范围。 例如:

 Range("A1:A10") = "some text" 

或者可能是这样的:

 Dim example As Range Set example = Range("A1:A10") example.Value = 8