如何使用#NAME解决excel错误2029?

时间:2012-08-01 13:40:25

标签: excel vba excel-vba cell

我读了一个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

谢谢!

3 个答案:

答案 0 :(得分:0)

这是你在尝试的吗?

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

答案 1 :(得分:0)

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

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

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

如果您不希望单元格包含=- ,请尝试使用此数据验证公式。同样,它将无法捕获像=NOW()=-hi这样的公式(#NAME?会看到-hi),但会拒绝=-123因为它看到了-123。如果您将单元格格式设置为文字,则它会拒绝任何内置=-的单元格,因为以=开头的值不会被视为公式

=NOT(OR(ISNUMBER(FIND("=",A18)),ISNUMBER(FIND("-",A18))))

答案 2 :(得分: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