Не работают макросы в эксель на макбуке

Обновлено: 04.07.2024

Данная статья является переводом статьи Джона Риццо (John Rizzo) «iWork and Office: Can they work together?» Статья показалась мне очень интересной и полезной, тут описаны многие подводные камни при работе с офисными документами, поэтому я решила её перевести. Мои комментарии будут выделены курсивом.

Apple говорит, что iWork совместим с Microsoft Office, но что это значит на самом деле?

Файлы Office в iWork

При попытке открыть файл Office в iWork используя «Файл: Открыть» (File: Open), iWork на самом деле их не открывает. Вместо этого он их импортирует и создает новый переведённый файл в формате Pages, Numbers или Keynote, таким образом оригинальный файл в формате Word, Excel или PowerPoint остаётся нетронутым. В этом можно убедиться при попытке сохранить файл: приложение iWork предложит вам сохранить документ в своём собственном формате по умолчанию, а не в формате Office.

Приложения iWork могут импортировать файлы в новых Open XML форматах Microsoft, которые используют расширение .docx, .xlsx и .ptpx. Это форматы по умолчанию в Office 2008 для Маков и в Office 2007 для Windows. Office 2004 может создавать только старые (они же стандартные) форматы Microsoft (.doc, .xls, .ppt), но iWork может их импортировать тоже.

Если у вас на Маке установлены как Office, так и iWork, и вы хотите, чтобы Pages открывал файл Word по двойному щелчку, выделите файл и выберете «Получить информацию» в меню файла (или нажмите Сmd+I). Расширьте область «Открыть с помощью» и выберите Pages в раскрывающемся меню.

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

Одной основной характеристикой Office, которую не поддерживает iWork, являются макросы Visual Basic Application (VBA) из Office 2004 для Маков и Office 2007 для Windows. Когда вы импортируете файл, содержащий макрос, все макросы из документа теряются.

Можно воссоздать большую часть функциональности макросов Office, используя AppleScript. Загвоздка в том, что вам придётся создавать скрипт, главным образом, вручную. Нет способа автоматически переводить макросы в Apple-скрипты. Это значит, что вам не повезло, если необходимо обмениваться обременённым макросами файлом с пользователями Office.

Не чувствуйте себя покинутыми. У пользователей Office 2008 для Маков такая же проблема: Office 2008 для Маков не поддерживает макросы. Это единственная причина, почему некоторые пользователи Маков не делают апгрейд с Office 2004. Похоже, Microsoft это заметила и объявила, что вернёт макросы обратно в следующей мажорной версии Office, но это врядли произойдёт очень скоро.

Word → Pages

Многие свойства Word’a хорошо передаются в Pages ’08. Например, свойство отслеживания изменений в Word хорошо импортируется в Pages, сохраняя имена редактировавших и даты изменений. Стили, созданные в Word, перемещаются, также как и большая часть объектов макета страниц (layout), например, таблицы, сноски, графика. Некоторые объекты окажутся в другом месте, чем в оригинальном документе, но они будут импортированы.

В случаях, когда Pages не поддерживает какого-либо свойства Word, Pages попытается конвертировать объект в что-нибудь другое. Pages переведёт Word Art из Word 2008 в текстовое поле без изгибов в тексте и без контуров и теней. Pages не поддерживает текстовые поля форм, но импортирует текст, введённый в формы Word.

Даже если оригинальный файл не содержит необычных функций Word, результирующий документ Pages не всегда будет точной копией оригинального документа Word. Типичной проблемой является то, что текст расползается с одной страницы на другую. Это может произойти, если на вашем Маке нет шрифта, который используется в оригинальном документе, когда Pages его заменит другим шрифтом, который несколько больше по физическому размеру.

Раздражает то, что вы можете столкнуться с проблемой расползания текста (text overflow), даже если у вас одинаковый шрифт, размер шрифта и межстрочный интервал в Word и Pages. Это происходит потому, что Word и Pages немного иначе определяют интерлиньяж, так что единичный межстрочный интервал в Pages немного шире, чем в Word, что приводит к перетеканию текста на другую страницу.

Excel → Numbers

Функции будут составлять основную проблему при импорте книг Excel. В Numbers’08 есть более 170 функций, это почти половина того, что есть в Excel 2008. Большинство недостающих функций — это статистические и цифровые функции, также в Numbers нет экселевских функций баз данных или порядка 35 инженерных функций. Если в книге Excel есть функция, которую Numbers не поддерживает, Numbers импортирует только рассчитанное числовое значение ячейки. Numbers пометит эти ячейки синим треугольником, по клику на который вы сможете увидеть функцию Excel, которая была удалена.

Numbers также не поддерживает свойство Excel защищать паролем скрытые ячейки и ряды. Numbers переведёт их как не скрытые, но пустые ячейки. Единственный способ получить информацию из этих ячеек — это попросить создателя документа Excel убрать защиту паролем.

Из личного опыта: Numbers — отличная программа для шпионской деятельности. Дело в том, что если в документе Excel какие-либо листы не удалили, а скрыли, Numbers отлично открывает и показывает их при импорте, хотя не один Excel как на Маке, так и на Windows их не видит. Помните об этом. Мне уже такие документы присылали. Случайно открыв их в Numbers, узнала много нового и интересного.

Кроме того, форматы валют не всегда совпадают. Значения в $ и евро будут переведены в Numbers как USD и EUR. Верно и обратное. Т.е. красивый формат валют при импорте придётся задавать заново.

PowerPoint → Keynote

Презентации слайдов хитро перемещаются с Мака на версию PowerPoint для Windows. Поэтому не удивительно, что вы потеряете часть слайдшоу PowerPoint при импорте в Keynote. Проблемы совместимости слайдшоу не постоянны, хотя и могут серьёзно помешать вам посмотреть презентацию.

Мультимедиа, переходы слайдов и встроенная анимация составляют основную область проблем с совместимостью. Что касается встроенного видео и аудио, QuickTime больше всего подходит для импорта в Keynote, чтобы их воспроизвести. К сожалению, видео и аудио, которые используются во встроенной анимации, могут мешать автоматическому переходу между слайдами до такой степени, когда вы даже вручную не сможете перейти к следующему слайду. Решением будет убрать автоматические переходы, либо убрать встроенные в слайд объекты мультимедиа.

Keynote очень неплохо справляется с воспроизведением других типов переходов и встроенных эффектов, включая переход в виде 3D поворота экрана, встроенных эффектов с изображениями и прыгающего или кружащегося текста.

iWork → Office

Пользователи Маков и Windows не смогут открыть файлы в нативном формате iWork в Office. Если вы хотите, чтобы пользователи офиса видели содержимое ваших документов, вам понадобится создать новый файл путём экспорта вашего файла iWork в офисный формат. Чтобы это сделать, например, в Pages, выберите Файл: Экспорт, выберите Word. Нажмите Далее и назовите экспортируемый файл.

Помните, что приложения iWork будут только осуществлять экспорт в старые форматы Microsoft (.doc, .xls, и .ppt); они не могут экспортировать в новые файловые форматы Open XML (.docx, .xlsx, and .pptx), которые используются в Office 2008 для Маков и Office 2007 для Windows, но эти новые версии Office могут читать старые форматы .doc,. xls, and .ppt, в которые может экспортировать iWork.

Тем не менее, если ваши коллеги или клиенты настаивают на получении Open XML файлов, ваши возможности выбора ограничены. Вы можете вставить простой текст в версию TextEdit для Leopard, который может экспортировать в .docx. К сожалению, в данный момент не существует утилит третьих сторон, которые могут создавать файлы Open XML.

Если ваши пользователи могут смириться с файлами, доступными только для чтения, экспорт документов iWork в PDF сохранит форматирование такое же, как в вашем оригинале. У Keynote есть больше вариантов только для чтения, которые лучше справляются со своей работой. Чтобы экспортировать файлы, доступные для редактирования в Office, вам придётся позаботиться о том, как создать ваш iWork-документ.

Pages → Word

Как Pages, так и Word поддерживают расчеты в таблицах, но эти двое не полностью совместимы. Над встроенными таблицами в документы Pages придётся потрудиться, чтобы они работали в Word.

Если вы посмотрите на таблицу в экспортированном документе Word, функциональность таблиц окажется удалённой (т.е. недоступной); изменение чисел в ячейках не приведёт к пересчёту значения в ячейках с формулами. Pages только частично конвертирует сложные таблицы: формулы всё ещё остаются на своих местах в файлах Word, но значения в ячейках конвертируются в фиксированный текст, а числовое форматирование отсутствует. Чтобы вернуться к функционирующей таблице, надо удалить формат фиксированного текста и применить числовое форматирование, используя пункт Формула в меню Таблица в Word. Это может быть слишком трудно для пользователя Word. Если вы хотите работающую таблицу, возможно, лучше использовать Numbers с текстовыми ячейками.

Есть также проблемы форматирования, которые приводят к тому, что экспортированный в Word документ отличается от оригинального файла Pages. Касательно таблиц: может оказаться, что таблица больше не помещается на одной странице. Небольшое расследование покажет, что функция экспорта добавила интервал абзаца после текста в каждой строчке, что привело к удлинению таблицы.

Файл, где используется много графики, может оказаться проблемным, т.к. графики может не быть на том же месте в файле Word. Лучше избегать при использовании графики применение альфа-каналов (уровней прозрачности), т.к. обычно они не выглядят хорошо после экспорта в Word.

Numbers → Excel

Numbers — другой зверь, чем Excel. Тогда как Excel представляет собой громадную сеть ячеек, Numbers — это больше программа разметки страницы, которая позволяет вам добавлять таблицы, текстовые поля и изображения в ваш макет. В Excel текстовые поля и графика идут поверх табличной сетки.

Это значит, что вам может понадобиться реорганизовать ваш файл Numbers, чтобы он экспортировался во что-то, что хорошо выглядит в Excel.

Когда вы экспортируете лист Numbers с несколькими таблицами, каждая из них становится отдельным листом Excel. Если вы хотите, чтобы пользователи Excel видели ваш макет страницы с одной таблицей, не используйте несколько таблиц на листе. Вместо этого, расположите все ваши таблицы в единую сеть Numbers.

Чекбоксы в Numbers — это приятная интерактивная функция, но пользователи Excel их не увидят. Чекбоксы превращаются в слова «true» или «false» («верно» или «неверно») в файлах, экспортированных в Excel.

В Numbers есть также некоторые функции, которые Excel будет полностью игнорировать. Например, названия таблиц в Numbers не будут отображаться в Excel. Если вы хотите назвать свою таблицу, вставьте текст в ячейку. С другой стороны, не вставляйте графику в ячейки. Графика внутри ячеек не будет переведена в Excel.

Keynote → PowerPoint

Экспорт презентаций в PowerPoint — это бóльшая проблема, чем их импорт в Keynote.

Эта проблема не происходит с PowerPoint 2004 или PowerPoint 2007 для Windows. Если вам не известно, какая версия PowerPoint стоит у ваших целевых пользователей, убедитесь, что вы удалили комментарии к слайдам перед экспортом.

Также следует избегать использовать графику с альфа-каналами. PowerPoint не поддерживает эту функцию, так что изображения за прозрачной частью могут оказаться перед вашей графикой в альфа-канале.

Keynote не сохраняет так много переходов слайдов и встроенных эффектов анимации при экспорте в PowerPoint по сравнению с импортом в эту программу. Она заменит множество встроенных эффектов анимации на простое растворение (dissolve) и удалит многие переходы между слайдами.

Если вы не заинтересованы в упрощении вашей презентации, Keynote предоставляет вам другие альтернативы экспорта, которые сохранят больше красивостей вашей презентации. Лучшим из вариантов будет экспорт вашей презентации в фильм QuickTime, что сохранит встроенные эффекты анимации и переходы, звуки и киноролики. Вам необходимо будет убедиться, что у пользователей Windows есть QuickTime для Windows, которую можно бесплатно загрузить с сайта Apple.

Если вы считаете, что переходы между слайдами в экспортированном файле QuickTime не гладкие, попробуйте снова экспортировать файл, внеся немного изменений в настройки. В диалоге экспорта выберите QuickTime. Во всплывающем меню Форматы выберите Индивидуально (Custom), далее нажмите кнопку Настройки. Теперь снимите галочку с пункта «Реорганизация кадров» («Frame Reordering») и выберите «Быстрое кодирование (однопроходное)» («Faster encode (Single-pass)»).

Keynote Export 01

Keynote Export 02

Если вы не уверены, что у пользователей Windows будет QuickTime-плеер, попробуйте варинт экспорта из Keynote во флеш. Флеш поддерживает некоторые переходы текста, например, построение в линии при каждом клике. При переключении между слайдами, растворение (dissolve) — это единственный эффект, который поддерживается при экспорте во флеш; он не поддерживает эффект перехода в виде крутящегося блока. Флеш также может включать звуковые файлы. У большинства пользователей Windows должен быть установлен флеш-плеер. На Маке флеш-презентация будет воспроизводиться в Сафари по двойному щелчку.

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

Keynote также позволяет осуществлять экспорт в более ранние версии Keynote, но для этого не стоит использовать команду «Экспорт». Чтобы сохранить презентацию в формате Keynote ‘05 или ‘06, используйте команду «Сохранить как» и выберите необходимую версию Keynote.

Итоги

В целом, чем проще документ, тем большей будет совместимость между iWork и Office. Сложные документы не очень хорошо выносят перемещения между Office и iWork, т.к. они будут что-то терять при каждом переводе. В частности, перемещение из PowerPoint в Keynote и обратно может привести к потере многих эффектов и общему ухудшению вида презентации. Если вам потребуются многочисленные раунды редактирования с пользователями Office, возможно, вам придётся стиснуть зубы и установить копию Office.

Для того, чтобы прочитать файлы Office и поделиться вашими документами с пользователями Office, iWork может быть вполне адекватным. Какая степень совместимости будет для вас достаточной, зависит только от вас.

Пока я работаю по такой схеме: все документы личного пользования создаются в iWork’08. Самые важные (или те, которыми необходимо с кем-то делиться) экспортируются в форматы Microsoft Office. Если необходимо что-то распечатать или показать кому-то, документы экспортируются в PDF.

Keynote Export 03

= Мир MS Excel/Статьи об Excel

Приёмы работы с книгами, листами, диапазонами, ячейками [6]
Приёмы работы с формулами [13]
Настройки Excel [3]
Инструменты Excel [4]
Интеграция Excel с другими приложениями [4]
Форматирование [1]
Выпадающие списки [2]
Примечания [1]
Сводные таблицы [1]
Гиперссылки [1]
Excel и интернет [1]
Excel для Windows и Excel для Mac OS [2]

Тема совместимости макросов для Win Excel и Mac Excel не нова. В этой статье попробуем разобраться, какие правила следует соблюдать, чтобы добиться возможности работать с файлами Excel как под Windows, так и под MacOS.

Правило первое: откажитесь от кириллицы, в идеале - везде (в тексте кода, названиях модулей, в формах и т.д.). Если это никак невозможно, то откажитесь хотя бы от русских заглавных букв. Дело в том, что у Windows и MacOS различаются кодировки, поэтому заглавные русские буквы коверкаются при открытии файла в разных ОС.

Так выглядит кодовая таблица русских букв на Windows А так выглядит кодовая таблица русских букв на MacOS


Нетрудно догадаться, что если файл создан в Win Excel, а потом открыт в Mac Excel (или наоборот), заглавные русские буквы в макросах, на формах, в именах модулей будут выглядеть кракозябрами


А вот так выглядит форма с русскими заглавными буквами, которую всего лишь раз открыли на Mac Excel


Правило второе , вытекающее из первого: присвойте листам кодовые имена, записанные латиницей. Кодовое имя листа - это имя модуля листа.
Изменить его можно в свойствах:



К слову, кодовое имя листа очень удобно использовать в макросе для обращения к листу.
То же самое следует сделать и с модулем книги.

Правило третье , вытекающее из первого: если Вы собираетесь макросом копировать, перемещать, переименовывать файлы, путь к файлу тоже должен содержать только латинские буквы.

Правило четвёртое: в модулях листов и модуле книги размещайте только макросы событий соответственно листа и книги, остальные макросы должны находиться в стандартных модулях

Отдельно надо сказать про формы. В Mac Excel 2011 был инструмент для создания и редактирования форм, в Mac Excel 2016 этого инструмента попросту нет. То есть файлы с уже созданными формами открываются и работают, но редактировать форму мы не сможем. На формы также распространяется правило НЕиспользования кириллицы.

Что касается самого кода, то тут следует помнить, что Mac Excel не умеет работать с некоторыми объектами, например, со словарями (Dictionary), с регулярными выражениями (RegExp) и др.


Кроме того, многие приёмы по-разному реализуются для Win Excel и Mac Excel. Например, совершенно по-разному реализована возможность открытия файла через диалог.
Более того, различия могут быть также между версиями Mac Excel. Например, если в макросе предполагается использовать путь к файлу, то в Mac Excel до 2011 включительно системным разделителем является двоеточие
Macintosh HD:Users:elena:Desktop:test.xlsm

А в Mac Excel 2016 системным разделителем будет слэш
/Users/elena/Desktop/test.xlsm

Таким образом, если мы хотим, чтобы наш файл с макросами работал и под Windows, и под MacOS, да ещё и в разных версиях Mac Excel, можно использовать такую конструкцию

[/vba]тоже ничего.
Обработка событий включена.
Подскажите, пожалуйста, в чем может быть проблема? С учетом того, что файл будет сохраняться и на винде и на маке, возможно ли что-то придумать или лучше обходиться одними формулами?


Кстати, раньше в этом же модуле листа был еще один макрос на кнопке, тоже не запускался. Вот что показывал (переназначение макроса не помогло):

Проблему решила переносом макроса в обычный модуль.

[/vba]тоже ничего.
Обработка событий включена.
Подскажите, пожалуйста, в чем может быть проблема? С учетом того, что файл будет сохраняться и на винде и на маке, возможно ли что-то придумать или лучше обходиться одними формулами?


Кстати, раньше в этом же модуле листа был еще один макрос на кнопке, тоже не запускался. Вот что показывал (переназначение макроса не помогло):

Проблему решила переносом макроса в обычный модуль. Manyasha

[/vba]тоже ничего.
Обработка событий включена.
Подскажите, пожалуйста, в чем может быть проблема? С учетом того, что файл будет сохраняться и на винде и на маке, возможно ли что-то придумать или лучше обходиться одними формулами?


Кстати, раньше в этом же модуле листа был еще один макрос на кнопке, тоже не запускался. Вот что показывал (переназначение макроса не помогло):

Проблему решила переносом макроса в обычный модуль. Автор - Manyasha
Дата добавления - 26.04.2016 в 23:29

Марин, Мак не работает с макросами в модуле листа.
Сам не пробовал, но слышал где-то. Марин, Мак не работает с макросами в модуле листа.
Сам не пробовал, но слышал где-то. _Boroda_

Не совсем так. В модуле листа работают макросы, относящиеся непосредственно к событиям листа
Worksheet_Change должен работать. Файл чуть позже посмотрю.


грозит тем, что ни там, ни там нормально работать не будет

Не совсем так. В модуле листа работают макросы, относящиеся непосредственно к событиям листа
Worksheet_Change должен работать. Файл чуть позже посмотрю.


грозит тем, что ни там, ни там нормально работать не будет Pelena
грозит тем, что ни там, ни там нормально работать не будет Автор - Pelena
Дата добавления - 26.04.2016 в 23:47 Ага, понятно. Жалко конечно, но хотя бы я теперь знаю, что нужно что-то другое придумывать.
Саша, Лена, спасибо большое! Ага, понятно. Жалко конечно, но хотя бы я теперь знаю, что нужно что-то другое придумывать.
Саша, Лена, спасибо большое! Manyasha В модуле листа работают макросы, относящиеся непосредственно к событиям листа
Я как раз это и имел в виду. В смысле макрос - это макрос, а обработчик событий - это не просто макрос, а обработчик.
Марин, а если сам макрос tt положить в обычный модуль, а в модуле листа написать на него ссылку - что-то типа
[vba] В модуле листа работают макросы, относящиеся непосредственно к событиям листа
Я как раз это и имел в виду. В смысле макрос - это макрос, а обработчик событий - это не просто макрос, а обработчик.
Марин, а если сам макрос tt положить в обычный модуль, а в модуле листа написать на него ссылку - что-то типа
[vba] В модуле листа работают макросы, относящиеся непосредственно к событиям листа
Я как раз это и имел в виду. В смысле макрос - это макрос, а обработчик событий - это не просто макрос, а обработчик.
Марин, а если сам макрос tt положить в обычный модуль, а в модуле листа написать на него ссылку - что-то типа
[vba] [/vba] Автор - _Boroda_
Дата добавления - 27.04.2016 в 00:09 макрос - это макрос, а обработчик событий - это не просто макрос, а обработчик

Вот это завернул [/offtop]
По теме:
создала новую книгу на Маке
скопировала туда листы из примера
скопировала текст макроса в модуль листа (именно текст)
На Маке всё работает, зато на win - нет, собственно, что и ожидалось
Исковеркались названия листов
Хотя, если в тексте макроса восстановить правильно слово Итого, то заработает, потому что коверкаются только заглавные буквы

Оригинальный файл так и не удалось запустить на Маке.

макрос - это макрос, а обработчик событий - это не просто макрос, а обработчик

Вот это завернул [/offtop]
По теме:
создала новую книгу на Маке
скопировала туда листы из примера
скопировала текст макроса в модуль листа (именно текст)
На Маке всё работает, зато на win - нет, собственно, что и ожидалось
Исковеркались названия листов
Хотя, если в тексте макроса восстановить правильно слово Итого, то заработает, потому что коверкаются только заглавные буквы

Оригинальный файл так и не удалось запустить на Маке. Pelena

макрос - это макрос, а обработчик событий - это не просто макрос, а обработчик

Вот это завернул [/offtop]
По теме:
создала новую книгу на Маке
скопировала туда листы из примера
скопировала текст макроса в модуль листа (именно текст)
На Маке всё работает, зато на win - нет, собственно, что и ожидалось
Исковеркались названия листов
Хотя, если в тексте макроса восстановить правильно слово Итого, то заработает, потому что коверкаются только заглавные буквы

Оригинальный файл так и не удалось запустить на Маке. Автор - Pelena
Дата добавления - 27.04.2016 в 07:58

Хотя, если в тексте макроса восстановить правильно слово Итого, то заработает, потому что коверкаются только заглавные буквы
Лен, а они коверкаются вообще всегда или только при копи-пасте?
Кстати, а если вот так написать?
[vba] Хотя, если в тексте макроса восстановить правильно слово Итого, то заработает, потому что коверкаются только заглавные буквы
Лен, а они коверкаются вообще всегда или только при копи-пасте?
Кстати, а если вот так написать?
[vba] Хотя, если в тексте макроса восстановить правильно слово Итого, то заработает, потому что коверкаются только заглавные буквы
Лен, а они коверкаются вообще всегда или только при копи-пасте?
Кстати, а если вот так написать?
[vba] [/vba] Автор - _Boroda_
Дата добавления - 27.04.2016 в 09:18


Они коверкаются при сохранении файла.
Посмотри на имя листа в редакторе VBA

С кодами символов вообще связываться не стоит, потому что кодировка разная. Как-то на Планете обсуждалась тема кодировки, я там выложила кодовую таблицу Мака.

Можно попробовать просто не использовать заглавные русские буквы. В идеале вообще не использовать кириллицу


Они коверкаются при сохранении файла.
Посмотри на имя листа в редакторе VBA

С кодами символов вообще связываться не стоит, потому что кодировка разная. Как-то на Планете обсуждалась тема кодировки, я там выложила кодовую таблицу Мака.

Можно попробовать просто не использовать заглавные русские буквы. В идеале вообще не использовать кириллицу Pelena

С кодами символов вообще связываться не стоит, потому что кодировка разная. Как-то на Планете обсуждалась тема кодировки, я там выложила кодовую таблицу Мака.

Можно попробовать просто не использовать заглавные русские буквы. В идеале вообще не использовать кириллицу Автор - Pelena
Дата добавления - 27.04.2016 в 09:28

Весьма частый случай на практике: вам нужно запускать один или несколько ваших макросов в заданное время или с определенной периодичностью. Например, у вас есть большой и тяжелый отчет, который обновляется полчаса и вы хотели бы запускать обновление за полчаса до вашего прихода на работу утром. Или у вас есть макрос, который должен делать автоматическую рассылку сотрудникам с заданной периодичностью. Или, работая со сводной таблицей, вы хотите, чтобы она обновлялась "на лету" каждые 10 секунд и т.д.

Давайте разберемся с тем, какие в Excel и Windows есть возможности для реализации подобного.

Запуск макроса с заданной частотой

Для этого проще всего использовать встроенный в VBA метод Application.OnTime, который запускает заданный макрос в указанный момент времени. Давайте разберемся с этим на практическом примере.

Откройте редактор Visual Basic одноименной кнопкой на вкладке Разработчик (Developer) или сочетанием клавиш Alt + F11 , вставьте новый модуль через меню Insert - Module и скопируйте туда следующий код:

Давайте разберемся что здесь что.

Для начала, нам нужна переменная, где будет храниться время следующего запуска нашего макроса - я назвал её TimeToRun. Обратите внимание, что содержимое этой переменной должно быть доступно всем нашим последующим макросам, поэтому её надо сделать глобальной, т.е. объявить в самом начале модуля до первого Sub.

Дальше идет наш главный макрос MyMacro, который будет выполнять основную задачу - пересчитывать книгу с помощью метода Application.Calculate. Чтобы было нагляднее, я добавил на лист в ячейку А1 формулу =ТДАТА(), которая выводит дату и время - при пересчете её содержимое будет обновляться прямо у нас на глазах (только включите отображение секунд в формате ячейки). Для дополнительного веселья я добавил в макрос еще и команду заливки ячейки А1 случайно выбранным цветом (код цвета - это целое числов в диапазоне 0..56, которое генерит функция Rnd и округляет до целого числа функция Int).

Заготовка

Макрос NextRun добавляет к предыдущему значению TimeToRun еще 3 секунды и затем назначает следующий запуск главного макроса MyMacro на это новое время. Само-собой, на практике можно использовать любые другие нужные вам временные интервалы, задавая аргументы функции TimeValue в формате "чч:мм:сс".

Ну и, наконец, просто для удобства добавлены еще макросы запуска последовательности Start и её завершения Finish. В последнем из них для прерывания последовательности используется четвёртый аргумент метода OnTime равный False.

Итого, если запустить макрос Start, то вся эта карусель завертится, и мы увидим на листе вот такую картину:

Остановить последовательность можно, запустив, соответственно макрос Finish. Для удобства можно обоим макросам назначить сочетания клавиш, используя команду Макросы - Параметры на вкладке Разработчик (Developer - Macros - Options) .

Запуск макроса по расписанию

Само-собой, всё описанное выше возможно только в том случае, если у вас запущен Microsoft Excel и в нём открыт наш файл. Теперь давайте рассмотрим более сложный случай: нужно по заданному расписанию, например, каждый день в 5:00 запускать Excel, открывать в нем большой и сложный отчет и обновлять в нем все связи и запросы, чтобы к нашему приходу на работу он был уже готов :)

В такой ситуации лучше воспользоваться Планировщиком Windows - специально встроенной в любую версию Windows программой, которая умеет по расписанию выполнять заданные действия. По факту, вы уже используете его, сами того не зная, ведь ваш ПК регулярно проверяет обновления, качает новые антивирусные базы, синхронизирует облачные папки и т.д. - это всё работа Планировщика. Так что наша задача сводится к тому, чтобы добавить к уже имеющимся задачам ещё одну, которая будет запускать Excel и открывать в нём заданный файл. А мы с вами повесим наш макрос на событие Workbook_Open этого файла - и задача решена.

Хочу сразу предупредить, что для работы с Планировщиком, возможно, потребуются расширенные пользовательские права, поэтому, если вы не можете найти описанных ниже команд и функций у себя на рабочем компьютере в офисе - обратитесь за помощью к вашим IT-специалистам.

Запускаем Планировщик

Итак, давайте запустим Планировщик. Для этого можно либо:

  • Щелкнуть правой кнопкой мыши по кнопке Пуск и выбрать Управление компьютером (Computer management)
  • Выбрать в Панели управления: Администрирование - Планировщик заданий (Control Panel - Administrative Tools - Task Scheduler )
  • Выбрать в главном меню Пуск - Стандартные - Служебные - Планировщик заданий
  • Нажать сочетание клавиш Win + R , ввести taskschd.msc и нажать Enter

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

Планировщик заданий

Создаем задачу

Чтобы создать новую задачу с помощью простого пошагового мастера нажмем на ссылку Создать простую задачу (Create Basic Task) в правой панели.

На первом шаге мастера нужно ввести название и описание создаваемой задачи:

Создаем задание

Жмем на кнопку Далее (Next) и на следующем шаге выбираем триггер - частоту запуска или событие, которое будет запускать нашу задачу (например, включение компьютера):

Выбираем триггер

Если вы выбрали Ежедневно (Daily) , то на следующем шаге нужно будет выбрать конкретное время, дату начала последовательности и шаг (каждый 2-й день, 5-й день и т.д.):

Выбираем время

Следующий шаг - выбираем действие - Запуск программы (Start a program) :

Выбираем действие - старт программы

И, наконец, самое интересное - что именно нужно открывать:

Выбираем программу и файл

    Щелкнуть правой кнопкой мыши по иконке (ярлычку) запуска Excel на рабочем столе или в панели задач и выбрать команду Свойства (Properties) , а затем в открывшемся окне скопировать путь из строки Target:

Где лежит excel.exe
Путь к файлу EXCEL.EXE

Excel в Диспетчере задач Windows
Свойства процесса Excel.exe

Когда всё ввели, то жмем Далее и затем Готово (Finish) . Задача должна добавиться в общий список:

Управление созданной задачей

Управление созданной задачей удобно осуществлять с помощью кнопок справа. Здесь можно протестировать задачу, запустив её немедленно (Run), не дожидаясь наступления заданного срока. Можно временно деактивировать задачу (Disable), чтобы она перестала выполняться на время, например, вашего отпуска. Ну, и изменить параметры (даты, время, имя файла) тоже всегда можно через кнопку Свойства (Properties) .

Добавляем макрос на открытие файла

Теперь осталось повесить в нашей книге запуск нужного нам макроса на событие открытия файла. Для этого откроем книгу и перейдем в редактор Visual Basic с помощью сочетания клавиш Alt + F11 или кнопки Visual Basic на вкладке Разработчик (Developer) . В открывшемся окне в левом верхнем углу нужно найти наш файл на дереве и двойным щелчком мыши открыть модуль ЭтаКнига (ThisWorkbook) .

Если у вас в редакторе Visual Basic не видно этого окна, то его можно открыть через меню View - Project Explorer.

В открывшемся окне модуля добавим обработчик события открытия книги, выбрав его из выпадающих списков в верхней части Workbook и Open, соответственно:

Добавляем обработчик события открытия книги

На экране должна появиться заготовка процедуры Workbook_Open, куда между строчками Private Sub и End Sub и нужно вставить те команды на VBA, которые должны автоматически выполняться при открытии этой книги Excel, когда её по расписанию откроет Планировщик. Вот несколько полезных вариантов для разгона:

    ThisWorkbook.RefreshAll - обновление всех внешних запросов к данным, запросов Power Query и сводных таблиц. Самый универсальный вариант. Только не забудьте разрешить по умолчанию подключения к внешним данным и обновление связей через Файл - Параметры - Центр управления безопасностью - Параметры центра управления безопасностью - Внешнее содержимое, иначе при открытии книги появится стандартное предупреждение и Excel, ничего не обновляя, будет ждать от вас благословления в виде нажатия на кнопку Включить содержимое (Enable content) :

Предупреждение о подключении к внешним данным

Если вы хотите, чтобы макрос выполнялся только при открытии файла Планировщиком в 5:00, а не каждый раз при открытии книги пользователем в течение рабочего дня, то имеет смысл добавить проверку на время, например:

Вот и всё. Не забудьте сохранить книгу в формате с поддержкой макросов (xlsm или xlsb) и можно смело закрывать Excel и отправляться домой, оставив компьютер включенным. В заданный момент (даже если ПК заблокирован) Планировщик запустит Excel и откроет в нём заданный файл, а наш макрос выполнит запрограммированные действия. А вы будете нежиться в постели, пока ваш тяжелый отчёт автоматически пересчитывается - красота! :)

Читайте также: