运行时错误'424'-需要对象-可以肯定我定义了正确的变量,但是代码仍然会中断吗?

时间:2019-07-11 11:26:24

标签: excel vba runtime-error

让我先对论坛礼节中的任何错误或违反规则的行为以及由于我仍在缓慢学习中不正确使用技术术语而道歉。

总而言之,我正在尝试构建一个工作表,该工作表根据用户所做的下拉选择将数据从引用位置拉到指定的单元格位置。

Sub retrieve_data()


    Dim LR As Long
    LR = orderLog2.Cells.Find("*", Cells(Rows.Count, Columns.Count), SearchOrder:=xlByRows, _
                              SearchDirection:=xlPrevious).Row
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Sheets("search").UsedRange.Offset(2, 0).ClearContents

    With Sheets("orderLog2")
        .AutoFilterMode = False
        .Range("A2:D" & LR).AutoFilter Field:=1, Criteria1:= _
                                       Sheets("search").Range("C5").Value

        .UsedRange.Offset(0, 0).SpecialCells(xlVisible).Copy
        Sheets("search").Range("E7").PasteSpecial
        .AutoFilterMode = False
    End With

    Application.CutCopyMode = False
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

因此,简而言之,我在工作表“ orderLog2”上有一个数据表(列A至D) 以及工作表“搜索”上的下拉列表。我希望,如果用户从下拉列表(位于单元格C5中)中选择一个用户名,则自动将工作表“ orderLog2”中的所有相关数据复制到工作表“ search”的单元格E7中。

这是插入工作表“搜索”中的代码:

Option Explicit
Private Sub dropdownselection(ByVal Target As Range)
    If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
    If Target.Address = "$C$5" Then

        Application.EnableEvents = False
        Call retrieve_data
        Application.EnableEvents = True

    End If
End Sub

行:“ LR = orderLog2.Cells.Find(” *“,单元格(Rows.Count,Columns.Count),SearchOrder:= xlByRows,_                               SearchDirection:= xlPrevious).Row“

是导致运行时错误的原因,我认为LR定义正确,可以用作参考。

如果我想为您提供任何导入信息,请随时告诉我,我们将不胜感激任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

尝试:

Sub retrieve_data()

Dim orderlog2 As Worksheet, LR As Long
Set orderlog2 = Sheets("orderlog2")

With orderlog2
    LR = .Cells.Find("*", .Cells(.Rows.Count, .Columns.Count), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End with

'Rest of code...

也许您甚至不需要最后一行:

Sub Test()

Dim orderlog2 As Worksheet, LR As Long
Set orderlog2 = Sheets("orderlog2")

Application.ScreenUpdating = False
Application.EnableEvents = False

With Intersect(orderlog2.UsedRange, orderlog2.Columns("A:C"))
    .AutoFilter 1, Sheets("search").Range("C5").Value
    .Offset(1).Resize(.Rows.Count - 1).Copy Sheets("search").Range("E7")
    .AutoFilter
End With

'Rest of code...