Переменная объекта или блок не установлен (Excel VBA) - PullRequest
1 голос
/ 10 июня 2019

На всякий случай, если это поможет - у меня не было проблем с этим макросом более года, пока я не загадочным образом проснулся этим утром и бумом, он падает со ссылкой «Ошибка времени выполнения» 91: переменная объекта или блок Not Set "(возможно, обновление для офиса?).

Эта часть моего кода ищет текущую дату в каждом рабочем листе и берет значение ячейки рядом с ней, чтобы отобразить ее в пользовательской форме (все текстовые поля - tbProg, tbPlan и tbImp)

    For Each Sh In ThisWorkbook.Worksheets

    If Sh.Name = "Progress since last meeting" Then
        tbProg.Text = Sh.Cells.Find(sNow).Offset(0, 1).Select
        tbProg.BackColor = Sh.Cells.Find(sNow).Offset(0, 2).Interior.Color
        x = x + 1
    End If
    If Sh.Name = "Planned before next meeting" Then
        tbPlan.Text = Sh.Cells.Find(sNow).Offset(0, 1).Value
        x = x + 1
    End If
    If Sh.Name = "Impediments" Then
        tbImp.Text = Sh.Cells.Find(sNow).Offset(0, 1).Value
        x = x + 1
    End If
    Next

Ошибка возникает на линии

tbProg.Text = Sh.Cells.Find(sNow).Offset(0, 1).Select

После небольшого количества проб и ошибок все отлично, пока я не использую

.Offset

или

.Select

или оба, или любой метод вообще.

Может кто-нибудь помочь мне найти решение этой проблемы?

1 Ответ

1 голос
/ 10 июня 2019

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

Также вам не нужно использовать Findкаждый раз в этом конкретном коде, только один раз ... попробуйте что-то вроде этого:

    Dim rngNow As Range
    For Each Sh In ThisWorkbook.Worksheets
        Set rngNow = Sh.Cells.Find(CDate(sNow))
        If rngNow is Nothing then Set rngNow = Sh.Cells.Find(sNow) 'Make a second attempt to find the date, in case is stored as a string instead.

        If Not rngNow Is Nothing Then

            If Sh.Name = "Progress since last meeting" Then
                tbProg.Text = rngNow.Offset(0, 1).Value
                tbProg.BackColor = rngNow.Offset(0, 2).Interior.Color
                X = X + 1
            End If
            If Sh.Name = "Planned before next meeting" Then
                tbPlan.Text = rngNow.Offset(0, 1).Value
                X = X + 1
            End If
            If Sh.Name = "Impediments" Then
                tbImp.Text = rngNow.Offset(0, 1).Value
                X = X + 1
            End If
        Else
            Debug.Print sNow & " was not found in " & Sh.Name
        End If
    Next Sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...