Поиск значения из определенной ячейки на другом листе - PullRequest
0 голосов
/ 25 апреля 2018

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

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

Если я активирую on error resume next, все работает, кроме функции табуляции, перестает работать на пользовательской форме, если я запускаю ее без on error resume next, я получаю ошибку во время выполнения:

'91 'Переменная объекта или переменная блока не установлена.

Как это исправить?

Sub Find_7_day()

        Dim vfind

        Dim rng As Range

        Sheets("Test Data").Select
        Sheets("Test Data").Range("$E$3").Select
        vfind = ActiveCell

        'On Error Resume Next
        Call Sheet
        Set rng = Cells.Find(What:=vfind, After:=ActiveCell,        LookIn:=xlValues, _
             LookAt:=xlWhole, SearchOrder:=xlByRows,     SearchDirection:=xlNext, _
             MatchCase:=True, SearchFormat:=False).Activate

       If ActiveCell = vfind Then
            Call Old_7_day
            Call Form_7_day_fill
        Else
            Sheets("Test Data").Select
        End If


End Sub

1 Ответ

0 голосов
/ 25 апреля 2018

Невозможно объявить и .Activate переменную range одновременно:

    Dim rng As Range

    Set rng = Cells.Find(What:=vfind, After:=ActiveCell, LookIn:=xlValues, _
         LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
         MatchCase:=True, SearchFormat:=False).Activate

предложение, избегайте использования .Select и Activate, объяснение здесь КакИзбегайте метода выбора в VBA и почему

Код:

Sub Find_7_day()

        Dim vfind As String
        Dim rng As Range

        vfind = Sheets("Test Data").Range("$E$3").Value

        Call Sheet

        Set rng = Cells.Find(What:=vfind, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=True, _
        SearchFormat:=False)

        If rng Is Nothing Then
        MsgBox vfind & " " & "dont exist"
        Exit Sub
        End If

       If rng.Value = vfind Then
            Call Old_7_day
            Call Form_7_day_fill
        Else
            Sheets("Test Data").Select
        End If

        Exit Sub

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...