ActiveWorkbook. Сохранено против ThisWorkbook. Сохранено против меня. Сохранено - PullRequest
0 голосов
/ 13 февраля 2019

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

В моем текущем отчете неизбежно используются нестабильные функции, поэтому пользователям, которые открывают, а затем немедленно закрывают файл, будет предложено сохранить?Диалог.Поиск в Интернете всегда указывал на использование

Private Sub Workbook_Open()
    ActiveWorkbook.Saved = True
End Sub

Несмотря на свою эффективность, я никогда не был большим поклонником из-за неспецифической природы "ActiveWorkbook".

Вопрос:

Каковы плюсы / минусы / ловушки использования любого из следующих вариантов -

  1. ActiveWorkbook.Saved
  2. ThisWorkbook.Saved
  3. Me.Saved
  4. Something_I_haven't_thought_of.Saved

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Активная рабочая книга - это рабочая книга, которая используется / активирована (следовательно, может изменяться во время выполнения кода) и, следовательно, менее надежна.

Эта рабочая книга является рабочей книгойна котором выполняется код.Следовательно, хороший вариант, если вы хотите обратиться к этой книге.

«Я» обозначает, где находится код.Например, если в sheetmodule он ссылается на этот лист, если в модуле пользовательской формы он ссылается на этот модуль, если в модуле thisworkbook он совпадает с 'thisworkbook' и т. Д.

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

Application.DisplayAlerts = False может использоваться для подавления запросов сохранения / перезаписи.Это может быть очень удобно, если вы не хотите, чтобы пользователи получали приглашение.
Повторно включите, поскольку это мощный, но «опасный» фрагмент кода.

0 голосов
/ 13 февраля 2019

ActiveWorkbook

Я бы сказал, что у нет плюсов для использования ActiveWorkbook, поскольку прямая ссылка на то, с чем вы работаете, должна всегда будет предпочтительным, особенно в случае, указанном выше, когда задействовано несколько рабочих книг.Даже в случае открытия и работы с произвольными рабочими книгами, имена которых вам неизвестны (через цикл FSO или Dir()), вы всегда можете установить переменную рабочей книги, равную значению, возвращаемому функцией Workbook.Open.

ThisWorkbook

Каждый раз, когда у вас есть код, работающий с несколькими книгами, или даже код, работающий с одной книгой, когда открыто несколько книг, я бы порекомендовал ThisWorkbook.Он универсален в том смысле, что его можно использовать в модулях объектного кода и универсальных модулях, чтобы возвращать непротиворечивую ссылку на книгу, в которой он находится.На самом деле нет никаких минусов в явном указании ThisWorkbook, когда вы на это ссылаетесь.

Me

Me и ThisWorkbookвзаимозаменяемы при использовании их внутри модуля объектного кода ThisWorkbook, но вне этого Me относится к объекту, в котором он находится.Например, Me.Name внутри модуля объектного кода рабочего листа даст вам имя рабочего листа.Если вы сделаете то же самое с модулем кода рабочей книги, вы получите название рабочей книги.

Для ясности и повторного использования я лично рекомендую ThisWorkbook из всех 3.

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