Докато мислите за автоматично отваряне на работни книги на Excel, помислете какво може да се случи, ако се опитате да отворите книга, която вече е отворена. В света, който не е VBA, Excel се опитва да отвори файла отново, като показаното съобщение предупреждава, че всички незапазени промени ще бъдат загубени. Можете да се предпазите от подобно събитие, като проверите дали даден файл вече е отворен, преди да се опитате да го отворите отново.
Избягвайте това предупредително съобщение.
Как работи макросът
Първото нещо, което трябва да забележите за този макрос, е, че той е функция, а не подпроцедура. Както ще видите, превръщането на този макрос във функция ви позволява да му подадете всяко име на файл, за да проверите дали този файл вече е отворен.
Същността на този код е проста. Тествате дадено име на файл, за да видите дали може да бъде присвоено на обектна променлива. Само отворени работни книги могат да бъдат присвоени на обектна променлива. Когато се опитате да присвоите затворена работна книга към променливата, възниква грешка.
Ако дадената работна книга може да бъде възложена, работната книга е отворена; ако възникне грешка, работната книга се затваря.
Функция FileIsOpenTest(TargetWorkbook като низ) като булева
„Стъпка 1: Декларирайте вашите променливи
Dim TestBook като работна тетрадка
„Стъпка 2: Кажете на Excel да продължи при грешка
При грешка Продължете напред
„Стъпка 3: Опитайте се да присвоите целевата работна книга на TestBook
Задайте TestBook = Workbooks(TargetWorkbook)
„Стъпка 4: Ако не е възникнала грешка, работната книга вече е отворена
Ако Err.Number = 0 Тогава
FileIsOpenTest = Вярно
иначе
FileIsOpenTest = False
Край, ако
Крайна функция
Първото нещо, което прави макросът, е да декларира String променлива, която ще съдържа името на файла, което потребителят избере. TestBook е името на вашата String променлива.
В стъпка 2 казвате на Excel, че може да има грешка при изпълнението на този код и в случай на грешка възобновете кода. Без този ред кодът просто ще спре, когато възникне грешка. Отново тествате дадено име на файл, за да видите дали може да бъде присвоено на обектна променлива. Ако дадената работна книга може да бъде присвоена, тя е отворена; ако възникне грешка, тя се затваря.
В стъпка 3 се опитвате да присвоите дадената работна книга към променливата TestBook Object. Работната книга, която се опитвате да присвоите, е низова променлива, наречена TargetWorkbook. TargetWorkbook се предава на функцията в декларациите на функциите (вижте първия ред на кода). Тази структура елиминира необходимостта от твърдо кодиране на име на работна книга, което ви позволява да го предадете като променлива вместо това.
В стъпка 4 просто проверявате дали е възникнала грешка. Ако не е възникнала грешка, работната книга е отворена, така че задавате FileIsOpenTest на True. Ако възникне грешка, работната книга не е отворена и сте задали FileIsOpenTest на False.
Отново, тази функция може да се използва за оценка на всеки файл, който предавате към него, чрез неговия аргумент TargetWorkbook. Това е красотата на поставянето на макроса във функция.
Следващият макрос показва как да приложите тази функция. Тук извиквате новата функция FileIsOpenTest, за да сте сигурни, че потребителят не може да отвори вече отворен файл:
Подмакрос1()
„Стъпка 1: Дефинирайте низова променлива
Dim FName като вариант
Dim FNFileOnly като низ
„Стъпка 2: Методът GetOpenFilename активира диалоговия прозорец
FName = Application.GetOpenFilename( _
FileFilter:="Excel Workbooks,*.xl*", _
Title:="Изберете работна книга за отваряне", _
MultiSelect:=False)
„Стъпка 3: Отворете избрания файл, ако още не е отворен
Ако FName <> False Тогава
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))