第一次发帖。我不是一个贸易程序员,这只是为了个人使用工作,使我的工作更有效率和容易,所以道歉可能是一个基本问题。
我搜索了一些示例来回答我的问题,但似乎无法找到一个似乎对我正在做的事情非常正确的答案。
我想让代码查看电子表格的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块变量未设置。
非常感谢任何帮助。
答案 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