Как следует из названия. Я хочу повторно открыть существующую книгу, чтобы обновить ее содержимое; почему-то метод Workbook.Open не может этого сделать.
Вот ситуация:
На общем диске находилась книга.
На компьютере А я открывал книгу, редактировал ее и время от времени сохранял.
На компьютере Б я открыл ту же книгу в режиме только для чтения. Я установил макрос, который запускается только тогда, когда книга открывается в режиме только для чтения, и он будет повторно открывать книгу с помощью метода Workbook.Open каждые 10 секунд (метод OnTime).
Я ожидаю, что книга, доступная только для чтения на компьютере B, может отображать изменения, внесенные на компьютере A после сохранения редактируемой книги. Однако независимо от того, сколько раз Workbook.Open запускался, содержимое книги на компьютере B вообще не менялось. Вот почему я не думаю, что книга действительно открывалась заново.
Что я сделал не так? Если повторное открытие книги не может обновить ее содержимое, какой смысл в ее повторном открытии? Есть ли способ сделать то, что я хочу? Спасибо!
Пожалуйста, отредактируйте свой вопрос и добавьте соответствующие коды.
@БигБен Да. Я видел, как другие люди пытались подобным образом снова открыть свои рабочие книги. Не уверен, что это правильный способ повторно открыть книгу.
Чтобы снова открыть книгу, сначала закройте книгу, а затем позвоните Workbooks.Open
.
@ VBasic2008 Я сделаю это. К сожалению, файл находится на компьютере компании, и я смогу получить к нему доступ только завтра. Сначала я пытаюсь описать свой вопрос, так как мне хотелось бы как можно скорее увидеть некоторые подсказки/предложения. Если у меня будет время сегодня вечером, я мог бы просто написать код еще раз и опубликовать его здесь.
@BigBen Я пробовал это. Но поскольку это одна и та же книга, как только я ее закрываю, код просто перестает выполняться.
@OTstand Хитрость для этого (на которую… ну, я бы не рекомендовал полагаться) заключается в том, что если вы используете Application.OnTime
, чтобы запланировать макрос из рабочей книги, а затем закрываете рабочую книгу, но не приложение (т. е. Excel остается open), то Excel снова откроет книгу, когда наступит запланированное время… Это работает, даже если запланированное время равно Now()
(т. е. без задержки).
@Chronocidal Ох... спасибо за вклад! Всегда любил видеть эти трюки и пробовать их сам.
Метод Workbook.Open откроет книгу, которая еще не открыта. Excel не позволит вам открыть две книги с одинаковым именем.
Я считаю, что вам нужен метод Workbook.UpdateFromFile, который обновляет файл, доступный только для чтения, из его источника.
Итак, код для обновления книги, если она доступна только для чтения, будет выглядеть следующим образом:
If ThisWorkbook.ReadOnly Then ThisWorkbook.UpdateFromFile
Спасибо за ваш ответ! Когда Workbook.Open выполняется, я вижу, что монитор обновляется, и я предполагаю, что книга снова открывается: P раньше не слышал о методе Workbook.UpdateFromFile, обязательно проверю его и проведу некоторое тестирование. Вернусь к вам после того, как попробую.
Судя по описанию метода, он делает именно то, что я хочу.
Удалось протестировать метод Workbook.UpdateFromFile перед сном, он сработал! Еще раз спасибо. Интересно, почему, когда я искал что-то вроде «Обновление Excel VBA, книга только для чтения», я не вижу, чтобы никто не упоминал этот метод.
Итак, вы звоните
Workbooks.Open
в уже открытой книге?