VBA Excel: как бороться с уже открытым файлом? - PullRequest
0 голосов
/ 28 апреля 2019

Что делает мой код: У меня шесть мастер-файлов.Каждый из этих мастер-файлов имеет шесть листов, в которые копируются ежеквартальные данные - каждый лист имеет свой исходный файл, из которого поступают эти данные.Таким образом, с точки зрения уже открытых рабочих книг, могут произойти две вещи: один из мастер-файлов открыт или один из исходных файлов открыт.

Возможно, я обдумываю это, но это мои мысли до сих пор:


Мастер-файлы

Каждый мастер-файл сохраняется как «masterfileDivisionX» (X = разные имена подразделений).Я использую для каждого цикла, чтобы пройти через каждый из них.Прежде чем мой код что-либо изменит, он сохраняет его как «masterfileDivisionX_old», затем проходит через код и в конце каждого цикла снова сохраняет его как «masterfileDivisionX», перезаписывая старый файл.Так что я могу сделать?

Я подумал, что самым элегантным может быть показ MsgBox с надписью "Пожалуйста, закройте файл".Если я хочу дать пользователю выбор между «ок», «отмена» и «сохранить с отметкой времени», мне понадобится пользовательская форма, верно?Два вопроса:

  • Если пользователь нажмет «ОК», мне придется еще раз проверить, действительно ли файл был закрыт - использовать ли здесь команду GoTo, чтобы вернуться квершина всего процесса проверки?Или я помещаю это в отдельную подпрограмму / функцию и просто вызываю ее снова изнутри себя?

  • Если пользователь выберет «отмена» и выйдет из подпрограммы, у меня, вероятно, останутся некоторые обновленные мастер-файлы, а некоторые - нет, поскольку они сохраняются после цикла длякаждый мастер-файл готов.Перед повторным выполнением подпрограммы мне нужен каждый файл в его старом состоянии, то есть не обновленный.Какой самый простой способ сделать это?Должен ли я сохранять файлы не после каждой итерации цикла, а оставлять их открытыми и сохранять их все только в конце подпрограммы?

Исходные файлы

Я ничего не меняю в исходных файлах, поэтому единственная проблема здесь в том, что кто-то редактирует файл, а мой код не использует самые последние или правильные данные.Я предполагаю, что «отменить» и «продолжить в любом случае» варианты здесь?

Файл, открытый на локальном ПК или файл, открытый другим пользователем

Реагирует ли Windows / VBAпо-разному в зависимости от того, кто открыл файл?Или это то же самое, независимо от того, открыт ли файл на моем компьютере или коллега на другом компьютере?


Хорошо, так что просто написать это помогло мне разобраться в своих мыслях и придумать решение UserForm.Если у кого-то есть вклад, я был бы очень признателен, потому что это первый раз, когда я сделал что-то подобное (= кодирование для кого-то другого).

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