Excel列表验证

时间:2013-08-16 17:41:55

标签: excel excel-vba vba

我有几个下拉列表。它们包含一个简单的Y / N组合。

我有几个外部电子表格,我必须从中复制和粘贴数据。但是,外部spreadshhets中的Y / N列可能包含小写的y / n。或是/否文字。

如果文本值是y / n或是/否我喜欢它符合列表值Y / N

我尝试向细胞本身添加一个公式,但是我得到一个循环引用错误。

然后我尝试了一个VBA脚本:

       Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo ErrorHandler:
    Dim cell As Range

              If Target.Column = 9 Then


                    If (UCase(ActiveCell.Value) = "YES") Then
                       ActiveCell.Value = "Y"

                    ElseIf UCase(ActiveCell.Value) = "NO" Then
                        ActiveCell.Value = "N"

                    ElseIf UCase(Target.Value) = Empty Then
                        ActiveCell.Value = "N"

                    Else
                        ActiveCell.Value = UCase(ActiveCell.Value)
                    End If

               End If    

Exit Sub

    ErrorHandler:
    MsgBox "An error occured -  error  " & Err.Number & ": " & Err.Description

    End Sub

这几乎可以将值从YES更改为Y等,并检查大写但是崩溃了。

1 个答案:

答案 0 :(得分:0)

好的,vbs脚本似乎是要走的路。我不得不补充一下 一旦我执行了excel停止崩溃,我就得到了我正在寻找的结果。该文件的Application.EnableEvents。

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo ErrorHandler:
Dim cell As Range

     If Target.Column = 9 Then
        Application.EnableEvents = False

                   For Each cell In Target

                            If (UCase(cell.Value) = "YES") Then
                               cell.Value = "Y"

                            ElseIf UCase(cell.Value) = "NO" Then
                                cell.Value = "N"

                            ElseIf UCase(cell.Value) = Empty Then
                                cell.Value = "N"

                            Else
                                cell.Value = UCase(cell.Value)
                            End If

                   Next cell

                   Application.EnableEvents = True

            End If


Exit Sub

ErrorHandler:
MsgBox "An error occured -  error  " & Err.Number & ": " & Err.Description
Application.EnableEvents = True
End Sub