第一次发布。我不是行业程序员,这只是为了工作中的个人使用,以使我的工作更高效,更轻松,因此对可能是一个基本问题的问题表示歉意。

我已经搜索了一些示例来回答我的问题,但是似乎找不到适合我正在做的事情的答案。

我希望代码在电子表格的第1行中显示。如果找到带有文本“ WarrantyCode”的单元格,则选择该单元格。否则,在第1行中找到第一个空单元格,并将其设置为“ 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块变量未设置。

任何帮助将不胜感激。

最佳答案

您的密码

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

08-05 14:41