Док размишљате о аутоматском отварању Екцел радних свеска, размислите шта се може догодити ако покушате да отворите књигу која је већ отворена. У свету који није ВБА, Екцел покушава поново да отвори датотеку, а приказана порука упозорава да ће све несачуване промене бити изгубљене. Можете се заштитити од такве појаве тако што ћете проверити да ли је дата датотека већ отворена пре него што покушате да је поново отворите.
Избегавајте ову поруку упозорења.
Како функционише макро
Прва ствар коју треба приметити код овог макроа је да је то функција, а не подпроцедура. Као што ћете видети, претварање овог макроа у функцију омогућава вам да му проследите било које име датотеке да бисте тестирали да ли је та датотека већ отворена.
Суштина овог кода је једноставна. Тестирате дато име датотеке да бисте видели да ли се може доделити променљивој објекта. Само отворене радне свеске могу се доделити променљивој објекта. Када покушате да променљивој доделите затворену радну свеску, долази до грешке.
Ако се дата радна свеска може доделити, радна свеска је отворена; ако дође до грешке, радна свеска се затвара.
Функција ФилеИсОпенТест(ТаргетВоркбоок као стринг) као Боолеан
'Корак 1: Декларисајте своје променљиве
Дим ТестБоок као радна свеска
„Корак 2: Реците Екцел-у да настави са грешком
У случају грешке Настави даље
„Корак 3: Покушајте да доделите циљну радну свеску ТестБоок-у
Постави тест свеска = Воркбоокс(ТаргетВоркбоок)
„Корак 4: Ако није дошло до грешке, радна свеска је већ отворена
Ако је Ерр.Нумбер = 0 Онда
ФилеИсОпенТест = Тачно
Иначе
ФилеИсОпенТест = Нетачно
Крај Ако
Енд Фунцтион
Прва ствар коју макро ради је да декларише променљиву Стринг која ће садржати име датотеке које корисник одабере. ТестБоок је име ваше стринг променљиве.
У кораку 2, кажете Екцел-у да може доћи до грешке при покретању овог кода и, у случају грешке, наставите са кодом. Без ове линије, код би се једноставно зауставио када дође до грешке. Опет, тестирате дато име датотеке да видите да ли се може доделити променљивој објекта. Ако се дата радна свеска може доделити, она је отворена; ако дође до грешке, затвара се.
У кораку 3 покушавате да доделите дату радну свеску променљивој ТестБоок Објецт. Радна свеска коју покушавате да доделите је стринг променљива која се зове ТаргетВоркбоок. ТаргетВоркбоок се прослеђује функцији у декларацијама функције (погледајте први ред кода). Ова структура елиминише потребу за чврстим кодирањем имена радне свеске, омогућавајући вам да га уместо тога проследите као променљиву.
У кораку 4, једноставно проверите да ли је дошло до грешке. Ако није дошло до грешке, радна свеска је отворена, па сте поставили ФилеИсОпенТест на Тачно. Ако је дошло до грешке, радна свеска није отворена и ви сте поставили ФилеИсОпенТест на Фалсе.
Опет, ова функција се може користити за процену било које датотеке коју јој проследите, преко њеног аргумента ТаргетВоркбоок. Ово је лепота стављања макроа у функцију.
Следећи макро показује како да примените ову функцију. Овде позивате нову функцију ФилеИсОпенТест да бисте били сигурни да корисник не може да отвори већ отворену датотеку:
Подмакро1()
'Корак 1: Дефинишите стринг променљиву
Дим ФНаме као варијанта
Дим ФНФилеОнли Ас Стринг
„Корак 2: Метод ГетОпенФиленаме активира оквир за дијалог
ФНаме = Апплицатион.ГетОпенФиленаме( _
ФилеФилтер:="Екцел Воркбоокс,*.кл*", _
Титле:="Изаберите радну свеску за отварање", _
МултиСелецт:=Фалсе)
„Корак 3: Отворите изабрану датотеку ако већ није отворена
Ако ФНаме <> Фалсе Онда
ФНФилеОнли = СтрРеверсе(Лево(СтрРеверсе(ФНаме), _
ИнСтр(СтрРеверсе(ФНаме), ") - 1))