Почему я получаю ошибку 424 Object Required при попытке установить диапазон? - PullRequest
0 голосов
/ 24 января 2019

Я новичок в VBA, поэтому извиняюсь за любые любительские ошибки.

Я пытаюсь запустить функцию сопоставления для некоторого пользовательского ввода из формы (переменная с именем client ниже) и использовать строку из функции сопоставления для хранения ввода пользователя, связанного с этой строкой.

Я получаю

424 Требуется объект

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

Private Sub OK_Test_Click()    
    Dim rng As Range
    Dim client As String

    client = LastNameSearch.Text

    Set rng = OutputSheet.Range("B2:B8") 'debugger brings me here, 
                                          tells me rng = Nothing

    rowLocation = Application.WorksheetFunction.Match(client, rng, 0)

    Cells(C, rowLocation) = CaseStatusBox.Text
    Cells(D, rowLocation) = StaffEntryBox.Text
    Cells(G, rowLocation) = Date 
End Sub

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Попробуйте использовать функцию Worksheets ().

 Set rng = Worksheets("OutputSheet").Range("B2:B8")
 Debug.Print (rng.Count) 'Returns 7

Я не могу проверить весь ваш код, потому что я не уверен, что означает LastNameSearch.

0 голосов
/ 25 января 2019

Не нужно извиняться, это происходит постоянно! :)

Option Explicit не указано, а OutputSheet не определено.

Это делает OutputSheet необъявленной переменной Variant/Empty, от которой вы не можете легально сделать вызов члена, так как это не объект - следовательно, "объект требуется".

Если в верхней части модуля указано Option Explicit, код не будет компилироваться: VBE будет предупреждать вас о необъявлении OutputSheet.

Для того чтобы OutputSheet существовал, вам нужно найти этот лист в Project Explorer (Ctrl + R), а затем изменить его свойство (Name) (F4) на OutputSheet.

properties toolwindow

Или, вы можете объявить переменную OutputSheet As Worksheet и Set ее для действительной Worksheet ссылки на объект - например:

Dim OutputSheet As Worksheet
Set OutputSheet = ActiveWorkbook.Worksheets("OutputSheet")

Предполагается, что лист существует в ActiveWorkbook с "именем вкладки" OutputSheet; обратите внимание, что пользователь может легко изменить это; * * * * * * * * * * * * * * * * * * * * * * * Свойство (Name) гораздо сложнее изменить для пользователя, но для этого требуется, чтобы лист существовал в ThisWorkbook во время компиляции.


Обратите внимание, что неквалифицированные вызовы Cells в нижней части процедуры неявно ссылаются на любой рабочий лист, который в настоящее время называется ActiveSheet - рассмотрите возможность их квалификации с правильной Worksheet ссылкой на объект. Если вы хотите написать OutputSheet, это означает:

OutputSheet.Cells(C, rowLocation) = CaseStatusBox.Text
OutputSheet.Cells(D, rowLocation) = StaffEntryBox.Text
OutputSheet.Cells(G, rowLocation) = Date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...