如果是IsError函数

时间:2016-09-15 19:40:49

标签: excel-vba if-statement vba excel

第一次发帖。我不是一个贸易程序员,这只是为了个人使用工作,使我的工作更有效率和容易,所以道歉可能是一个基本问题。

我搜索了一些示例来回答我的问题,但似乎无法找到一个似乎对我正在做的事情非常正确的答案。

我想让代码查看电子表格的Row1。如果找到包含文本" WarrantyCode"的单元格,则选择该单元格。否则,找到Row1中的第一个空单元格并使其成为" WarrantyCode"

这是我的代码。

Sub WCFInd()
If IsError(ActiveWorkbook.Worksheets("Sku").Rows(1).Find("WarrantyCode").Select) Then
Range("A1").End(xlToRight).Offset(0, 1).Select
    Selection.Value = "WarrantyCode"
           Else
                 ActiveWorkbook.Worksheets("Sku").Rows(1).Find("WarrantyCode").Select
End If
End Sub

当Row1的单元格为" WarrantyCode"它正确地选择了细胞。但是当它没有时,我得到运行时错误' 91':对象变量或With块变量未设置。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

您的代码

ActiveWorkbook.Worksheets("Sku").Rows(1).Find("WarrantyCode").Select

正在选择一个单元格,而不是提供对单元格的引用。 IsError函数的语法是IsError( expression ),这意味着必须将某些内容作为参数传递,并且您实际上根本没有传递任何参数。

请删除.Select,然后使用以下行:

If IsError(ActiveWorkbook.Worksheets("Sku").Rows(1).Find("WarrantyCode")) Then

并且您的代码不会崩溃。

但是,您可能要做的是:

Sub WCFInd()
If ActiveWorkbook.Worksheets("Sku").Rows(1).Find("WarrantyCode") Is Nothing Then
Range("A1").End(xlToRight).Offset(0, 1).Select
    Selection.Value = "WarrantyCode"
           Else
                 ActiveWorkbook.Worksheets("Sku").Rows(1).Find("WarrantyCode").Select
End If
End Sub

并且该代码可以更好地编写(我认为无论如何)

Sub WCFInd()
    With ActiveWorkbook.Worksheets("Sku").Rows(1)
        If .Find("WarrantyCode") Is Nothing Then
            .Cells(1, .Columns.Count).End(xlToLeft).Offset(0, 1).Value = "WarrantyCode"
        End If
        .Find("WarrantyCode").Select
    End With
End Sub

答案 1 :(得分:2)

这是一种方式:

Sub UsingFind()
    Dim r As Range
    Set r = ActiveWorkbook.Worksheets("Sku").Rows(1).Find("WarrantyCode")
    If r Is Nothing Then
        Range("A1").End(xlToRight).Offset(0, 1).Select
    Else
        r.Select
    End If
End Sub