Неожиданное отображение рабочей книги при выполнении workbook.close, в то время как application.visible = false - PullRequest
1 голос
/ 24 февраля 2020

У меня неожиданное отображение при закрытии новой книги!

Я запускаю свой макрос из командной строки.
Приложение становится невидимым из workbook_open:

Sub workbook_open()

    Application.Visible = False
    UserForm1.Show
    Application.Visible = True

End Sub

UserForm1 содержит одна кнопка.
-> Отображается только пользовательская форма.

При нажатии на кнопку запускается следующий код:

Sub UnexpectedDisplay()

    Dim NewBook As Workbook
    Debug.Print "_______________"

    Application.Visible = False
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Set NewBook = Workbooks.Add

    With NewBook
        .Title = "MyTitle"
        .Subject = "Display"
        .SaveAs Filename:="MyWorkbook"
    End With

    Debug.Print ActiveWorkbook.Name
    MsgBox "New workbook added"

    NewBook.Close SaveChanges:=True

    Debug.Print ActiveWorkbook.Name
    MsgBox "Workbook closed"

    Application.DisplayAlerts = True

End Sub

Отображается первое сообщение msgbox: «Добавлена ​​новая книга»
-> Отображается только msgbox.

Нажмите «Ok»

Отображается второе окно сообщения: «Workbook closed»
Трассировка отладки:

_______________   
MyWorkbook.xlsx   
MyMacroFile.xlsm   

-> Рабочая книга становится видимой
(когда MyMacroFile.xlsm открыт?).

-> Вопрос : Как этого избежать.

1 Ответ

0 голосов
/ 26 февраля 2020

Пожалуйста, попробуйте этот код.

Sub TestInVis()

    Dim Wb As Workbook
    Dim Fn As String

    Fn = FileOpenName("Test")
    Application.ScreenUpdating = False
    Set Wb = Workbooks.Open(Fn)
    Wb.Windows(1).Visible = False
    Application.ScreenUpdating = True
End Sub

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

В моем тестируйте, действие Open не восстанавливало обновление экрана, но я не уверен, что его отключение имеет значение. При открытии рабочей книги мерцание, и я подумал, что оно менее заметно при ScreenUpdating = False. Это будет продлено, однако, если файл большой. Так или иначе, файл открывается невидимо, и вы можете получить к нему доступ через переменную объекта, которой он был назначен.

Затем я протестировал ту же процедуру с Workbooks.Add. Все, что я сказал о Open, применимо в равной степени, за исключением того, что новая рабочая книга, конечно, очень мала. Поэтому еще сложнее сказать, действительно ли ScreenUpdating имеет значение.

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