我知道 excel 具有数据验证功能,但有没有办法自动为用户应用更改,而不是提示他们有问题?
例如,我们有一个通用的电子表格模板供我们的内部系统添加项目。在第一列中,对于项目编号,不能有任何非法字符。因此,如果用户在 A1 中输入 AN-XR10LP/1,然后单击下一个单元格,我希望验证将 A1 值更正为 ANXR10LP1,而无需用户执行任何操作。
关于如何从这个开始的任何想法?
我知道 excel 具有数据验证功能,但有没有办法自动为用户应用更改,而不是提示他们有问题?
例如,我们有一个通用的电子表格模板供我们的内部系统添加项目。在第一列中,对于项目编号,不能有任何非法字符。因此,如果用户在 A1 中输入 AN-XR10LP/1,然后单击下一个单元格,我希望验证将 A1 值更正为 ANXR10LP1,而无需用户执行任何操作。
关于如何从这个开始的任何想法?
我认为您只能使用 VBA 完成此操作。试试下面的代码。如果您对单元格进行数据验证,则可能需要对其进行调整。
将此模块放置在您希望验证数据的工作表对象中。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Rows.Count = 1 Then '-> make sure row count is 1 and target is in column A, can further refine if needed
Dim strValue As String
strValue = CleanString(Target.Value)
Application.EnableEvents = False
Target = strValue
Application.EnableEvents = True
End If
End Sub
Function CleanString(str As String) As String
CleanString = Replace(str, "-", "")
CleanString = Replace(CleanString, "/", "")
'...
'keep adding replacements as needed
End Function
为 Worksheet_Change 创建一个处理程序
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
在处理程序中,查看Target
指向的位置,并在此基础上应用验证逻辑。
Change
确保在写回更正值时忽略引发的事件:
Private Sub Worksheet_Change(ByVal Target As Range)
static self_protect as boolean
if self_protect then exit sub
...
self_protect = true
Target.Value = "corrected value"
self_protect = false
...
End Sub