vba代码适用于一个工作表,但不适用于第二个工作表

时间:2018-05-25 11:14:17

标签: excel vba excel-vba

我正在尝试创建一个能够找到输入的请购单号的查找功能,然后将信息放入正在搜索的单元格中的单元格中。我只更改了原始公式的工作表名称和范围。没有别的不同。我收到错误

  

' 1004' "无法获取Range类"

的Activate属性

在.activate

我能够通过插入

之前的激活来使代码正常工作
    dim ReqNumber

这很有效,但现在它告诉我搜索方法所需的对象。

    set cF= .Find

这给了我一些问题。我现在不太确定是什么问题。

 Dim ReqNumber As Variant
ReqNumber = InputBox("Please Enter Requisition Number", "Information")

Dim FirstAddress As String, cF As Range

With ThisWorkbook.Sheets(" MthruF Schedule").Range("A:A")
    .Cells(1, 1).Activate
    'First, define properly the Find method
    Set cF = .Find(What:=ReqNumber, _
                after:=ActiveCell, _
                LookIn:=xlFormulas, _
                LookAt:=xlPart, _
                SearchOrder:=xlByColumns, _
                SearchDirection:=xlNext, _
                MatchCase:=False, _
                SearchFormat:=False)

    'If there is a result, keep looking with FindNext method
    If Not cF Is Nothing Then
        FirstAddress = cF.Address
        Do
            cF.Offset(0, 8).Value = ReqNumber
            cF.Offset(0, 9).Value = EmpInfo.FirstName.Value & " " & EmpInfo.LastName.Value
            cF.Offset(0, 10).Value = EmpInfo.ComboBox3.Value & "/" & EmpInfo.ComboBox20.Value & "/" & EmpInfo.YearCmb.Value
            cF.Offset(0, 11).Value = EmpInfo.AgencyBox.Value
            Set cF = .FindNext(cF)
        'Look until you find again the first result
        Loop While Not cF Is Nothing And cF.Address <> FirstAddress
    End If
End With

1 个答案:

答案 0 :(得分:0)

认为是因为您在运行代码时选择了错误的工作表。
如果您没有使用正确的表格,此代码将失败:

Worksheets("MthruF Schedule").range("A1").activate

要执行搜索,无论您要删除.Cells(1,1).Activate行的哪张表,您都不需要选择或激活要使用它的单元格。

FIND使用ActiveCell替换.Cells(1,1)

通过这些更改,无论您使用哪张表,FIND始终会在MthruF Schedule的A列{@ 1}}列中查看。

修改
由于您没有更改您发现的值,因此您无需在循环中使用A1Not cF Is Nothing总是会找到一个值,除非您正在更改它 - 所以只需检查FIND