Ошибка времени выполнения '424' - требуется объект - уверен, что я правильно определил переменные, но код все еще ломается? - PullRequest
0 голосов
/ 11 июля 2019

Позвольте мне начать с того, что я заранее извиняюсь за любые ошибки в этикете форума или за нарушение правил, а также за неправильное использование технических терминов, поскольку я все еще учусь медленно.

Подводя итог, я пытаюсьсоздать лист, который извлекает данные из ссылочного местоположения в указанное местоположение ячейки на основе выпадающего выбора, сделанного пользователем.

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.

Вот код, вставленный в лист "search":

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

Lines: "LR = orderLog2.Cells.Find (" * ", Cells (Rows.Count, Columns.Count), SearchOrder: = xlByRows, _ SearchDirection: = xlPrevious) .Row "

- это то, что вызывает ошибку времени выполнения, я предположил, что LR определен правильно и может использоваться для справки.

Ребята, если мне не хватает импортируемой информации, пожалуйста, не стесняйтесь, дайте мне знать, любая помощь или совет будут высоко оценены.

1 Ответ

0 голосов
/ 11 июля 2019

Попробуйте:

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...
...