Переменная объекта или переменная блока не установлена ​​при открытии файла Excel - PullRequest
0 голосов
/ 05 ноября 2018

Поскольку я не смог найти способ увеличить размер шрифта в раскрывающемся списке, мне пришлось искать обходной путь. Одним из вариантов является увеличение. Поэтому у меня есть этот кусок кода - который работает отлично. Но как только я закрываю файл и пытаюсь открыть его снова, появляется сообщение об ошибке: «Переменная объекта или переменная блока не установлена».

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

On Error GoTo errorHandler

Dim xZoom As Long
xZoom = 60

If Target.Validation.Type = xlValidateList Then xZoom = 125

errorHandler:
ActiveWindow.Zoom = xZoom  'Debug highlights this row

End Sub

Я попробовал событие:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

On Error GoTo errorHandler

Dim wb as Workbook

Dim xZoom As Long
xZoom = 60

Set wb = ThisWorkbook

wb.Activate

If Target.Validation.Type = xlValidateList Then xZoom = 125

errorHandler:
ActiveWindow.Zoom = xZoom  'Debug highlights this row

End Sub

Но, похоже, ничего не работает ... Я просто не знаю, в чем причина ... Может ли кто-нибудь помочь мне?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вероятно, что в том состоянии процесса загрузки рабочей книги, что ActiveWindow еще не было установлено (объект _Global не находится в состоянии, в котором он может обработать запрос). Window все еще должен быть доступен - вам нужно только найти его из переданного Range:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo errorHandler

    Dim xZoom As Long
    xZoom = 60

    If Target.Validation.Type = xlValidateList Then xZoom = 125

errorHandler:
    Me.Parent.Windows(1).Zoom = xZoom
End Sub

Я бы также предложил поместить тот же код в обработчик событий Worksheet_Activate() - при IIR Worksheet_SelectionChange не сработает, если на другом листе есть фокус, когда открывается рабочая книга, и вы переходите на тот, который хотите увеличить.

0 голосов
/ 05 ноября 2018

Проверьте, что windows.count> 0, прежде чем выполнять масштабирование.

If Application.Windows.Count > 0 Then
    ActiveWindow.Zoom = xZoom
End If

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    On Error GoTo errorHandler

    Dim xZoom As Long
    xZoom = 60

    If Target.Validation.Type = xlValidateList Then
        xZoom = 125
        If Application.Windows.Count > 0 Then
            ActiveWindow.Zoom = xZoom  'Debug highlights this row
        End If
    End If
Exit Sub 'must exit before the error handler
errorHandler:
    Msgbox(Err.Description)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...