3

我读了一个excel文件,在一个单元格上我得到了这样的文本:

"=- Bla Bla Bla". 这将不会被识别并会显示#NAME?

因此,如果您需要读取一些单元格并将其输入数据库,则文件中的此错误将显示为Error 2029. 脚本将冻结。=那么,如果我在单元格中获取或字符,我是否可以预先替换内容,-以便在阅读内容并获取错误之前验证内容。我能不能越过它!

我需要细胞验证

Private Sub Worksheet_Change(ByVal Target As Range)
    c = Target.Cells.Column
    r = Target.Cells.Row
    'validate cell
End If

谢谢!

4

3 回答 3

2

这是你正在尝试的吗?

Sub Sample()
    Dim sTemp As String

    With Sheets("Sheet1")
        '~~> Check if cell has error
        If IsError(.Range("A1").Value) Then
            '~~> Check if it is a 2029 error
            If .Range("A1").Value = CVErr(2029) Then
                '~~> Get the cell contents
                sTemp = Trim(.Range("A1").Formula)
                '~~> Remove =/-
                Do While Left(sTemp, 1) = "=" Or Left(sTemp, 1) = "-"
                    sTemp = Trim(Mid(sTemp, 2))
                Loop
                '~~> Either put it in back in the cell or do
                '~~> what ever you want with sTemp
                .Range("A1").Formula = sTemp
            End If
        End If
    End With
End Sub
于 2012-08-01T14:00:08.503 回答
0

您还可以将数据验证添加到工作表中,以防止以这种方式输入内容。在“验证标准”下,允许“自定义”并输入以下公式:

=NOT(OR(IF(EXACT(LEFT(TRIM(A1),1),"-"),1,0),IF(EXACT(LEFT(TRIM(A1),1),"="),1,0)))

如果在单元格中输入的值以“-”或“=”(带有前导空格)开头,则它不会接受它。如果该人输入=123,那么它将是有效的,因为它被视为公式并且只会将其视为123

如果您不希望单元格包含=- 根本不包含,请尝试将其用于您的数据验证公式。同样,它无法捕捉到类似=NOW()or的公式=-hi(它会看到#NAME?for -hi),但它会拒绝,=-123因为它看到了-123. 如果您将单元格格式化为Text,那么它将拒绝任何带有=-内部的单元格,因为以开头的值=不被视为公式。

=NOT(OR(ISNUMBER(FIND("=",A18)),ISNUMBER(FIND("-",A18))))
于 2012-08-01T14:21:32.507 回答
0

我让它工作了

'verify cell for data
Private Sub Worksheet_Change(ByVal Target As Range)
    c = Target.Cells.Column
    r = Target.Cells.Row

    If IsError(Target.Worksheet.Cells(r, c)) Then
        MsgBox "You have a validation Error!"
        Target.Worksheet.Cells(r, c) = ""
        End If
End Sub
于 2012-08-02T12:24:47.730 回答