3

我知道 excel 具有数据验证功能,但有没有办法自动为用户应用更改,而不是提示他们有问题?

例如,我们有一个通用的电子表格模板供我们的内部系统添加项目。在第一列中,对于项目编号,不能有任何非法字符。因此,如果用户在 A1 中输入 AN-XR10LP/1,然后单击下一个单元格,我希望验证将 A1 值更正为 ANXR10LP1,而无需用户执行任何操作。

关于如何从这个开始的任何想法?

4

2 回答 2

2

我认为您只能使用 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
于 2012-09-21T16:02:24.833 回答
1

为 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
于 2012-09-21T16:02:09.310 回答