Запуск макроса по времени
Весьма частый случай на практике: вам нужно запускать один или несколько ваших макросов в заданное время или с определенной периодичностью. Например, у вас есть большой и тяжелый отчет, который обновляется полчаса и вы хотели бы запускать обновление за полчаса до вашего прихода на работу утром. Или у вас есть макрос, который должен делать автоматическую рассылку сотрудникам с заданной периодичностью. Или, работая со сводной таблицей, вы хотите, чтобы она обновлялась «на лету» каждые 10 секунд и т.д.
Давайте разберемся с тем, какие в Excel и Windows есть возможности для реализации подобного.
Запуск макроса с заданной частотой
Для этого проще всего использовать встроенный в VBA метод Application.OnTime, который запускает заданный макрос в указанный момент времени. Давайте разберемся с этим на практическом примере.
Откройте редактор Visual Basic одноименной кнопкой на вкладке Разработчик (Developer) или сочетанием клавиш Alt+F11, вставьте новый модуль через меню Insert — Module и скопируйте туда следующий код:
Dim TimeToRun 'глобальная переменная, где хранится следующее время запуска 'это главный макрос Sub MyMacro() Application.Calculate 'пересчитываем книгу Range("A1").Interior.ColorIndex = Int(Rnd() * 56) 'заливаем ячейку А1 случайным цветом :) Call NextRun 'запускаем макрос NextRun для назначения след.времени запуска End Sub 'этот макрос назначает время следующего запуска главного макроса Sub NextRun() TimeToRun = Now + TimeValue("00:00:03") 'прибавляем к текущему времени 3 сек Application.OnTime TimeToRun, "MyMacro" 'назначаем следующий запуск End Sub 'макрос для запуска последовательности повторений Sub Start() Call NextRun End Sub 'макрос для остановки последовательности повторений Sub Finish() Application.OnTime TimeToRun, "MyMacro", , False End Sub
Давайте разберемся что здесь что.
Для начала, нам нужна переменная, где будет храниться время следующего запуска нашего макроса — я назвал её 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):
И, наконец, самое интересное — что именно нужно открывать:
В поле Программа или сценарий (Program/script) нужно ввести путь к Microsoft Excel как к программе, т.е. непосредственно к исполняемому файлу Excel. На разных компьютерах с разными версиями Windows и Office этот файл может лежать в разных папках, поэтому вот вам несколько способов, как можно узнать его местоположение:
- Щелкнуть правой кнопкой мыши по иконке (ярлычку) запуска Excel на рабочем столе или в панели задач и выбрать команду Свойства (Properties), а затем в открывшемся окне скопировать путь из строки Target:
- Открыть любую книгу Excel, затем открыть Диспетчер задач (Task Manager) нажатием Ctrl+Alt+Del и, щелкнув правой кнопкой мыши по строке Microsoft Excel, выбрать команду Свойства (Properties). В открывшемся окне можно скопировать путь, не забыв потом дописать к нему обратный слэш и EXCEL.EXE в конце:
- Открыть Excel, открыть редактор Visual Basic сочетанием клавиш Alt+F11, открыть панель Immediate сочетанием Ctrl+G, ввести в неё команду:
? Application.Path
… и нажать на Enter
Cкопировать получившийся путь, не забыв потом дописать к нему обратный слэш и EXCEL.EXE в конце.
В поле Добавить аргументы (необязательно) (Add arguments (optional)) нужно вставить полный путь к книге с макросом, которую мы хотим открыть.
Когда всё ввели, то жмем Далее и затем Готово (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):
- ActiveWorkbook.Connections(«Имя_Соединения»).Refresh — обновление данных по соединению Имя_Соединения.
- Sheets(«Лист5«).PivotTables(«СводнаяТаблица1«).PivotCache.Refresh — обновление отдельно взятой сводной таблицы с именем СводнаяТаблица1 на листе Лист5.
- Application.Calculate — пересчет всех открытых книг Excel.
- Application.CalculateFullRebuild — принудительный пересчет всех формул и перестроение всех зависимостей между ячейками во всех открытых книгах (равносильно повторному вводу всех формул).
- Worksheets(«Отчет»).PrintOut — распечатать лист Отчет.
- Call MyMacro — запустить макрос с именем MyMacro.
- ThisWorkbook.Save — сохранить текущую книгу
- ThisWorkbooks.SaveAs «D:АрхивОтчет » & Replace(Now, «:», «-«) & «.xlsx» — сохранить книгу в папку D:Архив под именем Отчет с добавлением к имени даты и времени.
Если вы хотите, чтобы макрос выполнялся только при открытии файла Планировщиком в 5:00, а не каждый раз при открытии книги пользователем в течение рабочего дня, то имеет смысл добавить проверку на время, например:
If Format(Now, "hh:mm") = "05:00" Then ThisWorkbook.RefreshAll
Вот и всё. Не забудьте сохранить книгу в формате с поддержкой макросов (xlsm или xlsb) и можно смело закрывать Excel и отправляться домой, оставив компьютер включенным. В заданный момент (даже если ПК заблокирован) Планировщик запустит Excel и откроет в нём заданный файл, а наш макрос выполнит запрограммированные действия. А вы будете нежиться в постели, пока ваш тяжелый отчёт автоматически пересчитывается — красота!
Ссылки по теме
- Что такое макросы, как их использовать, куда вставлять код на Visual Basic в Excel
- Как создать свою надстройку с макросами для Excel
- Как использовать Личную Книгу Макросов (Personal Macro Workbook) как библиотеку для своих макросов в Excel
Время на прочтение
13 мин
Количество просмотров 10K
Всем привет! На связи Максим и я продолжаю описывать свой университетский опыт работы VBA программистом с Excel. В сегодняшней статье поговорим о том, как можно произвести изменения в десятках, сотнях, миллионах Excel файлов за один заход с помощью одного макроса и как этот концепт может сэкономить вам кучу времени, сил и средств. Данная статья будет полезна тем, кто вынужден часто совершать одинаковые изменения в большом количестве подобных друг другу Excel файлах, тем, кто устал от рутины и хочет автоматизировать процесс обновления рабочих документов или молодым студентам, которые находятся в поисках идей того, как можно выделится своими скиллами на рабочем месте. Бонусом внутри вы найдете пару моих рассуждений на тему дискуссий, которые возникли под моей прошлой статьей (если еще не читали ее, то советую ознакомиться, чтобы лучше понимать фон этой), а именно на тему актуальности Excel и VBA в европейских реалиях и общего уровня диджитализации на немецком рынке. Погнали!
Первым делом я бы хотел украсть минутку вашего времени, чтобы поблагодарить вас всех за активность на моей первой статье. Всего за 2 недели статья набрала 41 тысячу просмотров и стала, если я ничего не упустил, самой просматриваемой статьей на тему VBA на сайте! Это просто фантастика! Стоит признаться, что статья была написана часа за полтора в сонное и ленивое послеобеденное время жаркого летнего дня с целью поделиться с той кучкой людей, которые все-таки откопает ее в песочнице, своим небольшим опытом, а может даже помочь подзаработать копеечку, подкинув интересную на мой взгляд идею заработка. Но под статьей началась очень активная и интересная дискуссия, которая не прекращалась несколько дней. Я перечитал все комменты и был очень рад увидеть, что некоторые люди действительно заинтересовались темой и просили детальнее описать мой опыт программирования на VBA. Как я и обещал, я подготовлю небольшую серию статей, каждая из которых опишет реальные кейсы, с которыми я работал. Я постараюсь как можно проще и понятнее описать, какие практики реально полезные, а какие стоит избегать всеми возможными путями. Не буду больше тянуть, всем еще раз спасибо, теперь точно погнали!
Итак, первая профильная статья должна быть о чем-то, что сыграло в моей короткой карьере весомую роль. Поэтому я решил описать свой первый самостоятельный рабочий проект, успешное закрытие которого принесло мне продление рабочего контракта и изменило мою репутацию внутри отдела с «Какой-то малолетка, приходящий 2 раза в неделю и делающий все, что нам лень» на «Какой-то малолетка, приходящий 2 раза в неделю и делающий все, что нам лень, умеющий делать макросы». В первой статье, я вскользь описал свой отдел, а именно то, что из-за длинной очереди на автоматизацию с помощью стороннего софта, он был вынужден заниматься ею самостоятельно с помощью End-User Computing, облегчая себе жизнь Excel макросами на VBA.
Хочу оспорить мнение некоторых людей из комментариев под прошлым постом, кто говорит, что Excel уже прошлый век и нигде используется, а моя фирма это просто исключение. Ребята, я не зря много раз подчеркивал, что речь идет о рынке, вероятно, самой консервативной страны Европы – Германии. Чтобы коротко описать состояние местного рынка я расскажу вам короткую, но забавную историю. Я недавно проходил собеседование на должность практиканта в одну из крупнейших страховых фирм страны, а точнее в их дочернюю компанию занимающейся диджитализацией страховой и IT задачами в целом. Незадолго до собеседования мне пришел E-Mail от отдела кадров с общей информацией о предстоящем разговоре и рекомендацией о том, что неплохо было бы получше ознакомиться с самой фирмой на их сайте. Я открыл отправленную ими ссылку и предо мной открылась новостная лента этой компании. В закрепе висела статья с топовым названием: «Мы уходим от использования факса!» и фотография главы страховой с очень-очень довольным лицом. Извините, но я в свои 22 года не знаю даже как факсом пользоваться. А он оказывается до сих пор активно используется в немецких страховых фирмах… Факс — это вообще тема тут популярная, что вызывает у меня дикий восторг и истеричный смех. Особенно когда идешь с лекции на тему диджитализации, заходишь в приемную к врачу, а тебе там предлагают отправить твою справку о больничном напрямую работодателю по факсу и спрашивают номер. E-mail пока не освоили. Сразу воодушевляешься и начинаешь представлять как когда вырастешь и станешь взрослым, будешь проводить свои лучшие годы избавляя компании от использования факса в 20’х годах 21 века. Во время самого собеседования разговор, кстати, тоже прошел в интересном ключе. Глава IT отдела резко остановил меня после того, как я сказал, что заинтересован в 4-5 месячном практикуме и сказал, что ему нужен практикант минимум на 2-3 года, так как первые полтора уйдут на ознакомление с ландшафтом всех используемых систем, общее количество которых достигло 250. Ну накопилось за 30 лет, с кем не бывает.
Это я не о том, что тут люди копьями себе еду добывают и шкуры животных носят, я лишь о том, что современные технологии в местных фирмах внедряются очень и очень медленно, поэтому Excel это реально рабочая машинка номер 1 для абсолютного большинства как маленьких, так и больших компаний. Этому виной много факторов: очень жесткое и консервативное законодательство, требующее максимальную безопасность данных, банальное нежелание менять то, что десятилетиями работает и так далее и тому подобное. В государственных учреждениях, если я не ошибаюсь, чисто с юридической стороны вопроса разрешено использовать только офисный пакет от Microsoft, даже переход на версию 365 предвидеться лишь в обозримом будущем. В долгосрочной же перспективе все государственные фирмы планируют пересадить на офисный пакет от местного производителя (который еще пока не разработан), чтобы убрать зависимость от американского софта. Короче вы поняли. Все достаточно плохо. Рукастые ребята, которые хотят и могут сделать по-модному и современному часто сталкиваются с нежеланием и страхом руководства что-то менять. У меня не получилось уговорить даже бесплатную версию Asana внедрить в отдел, а вы говорите про современные облачные решения для работы с данными. Лет через 15 может, торопиться некуда, Excel не подведет.
Но я что-то отошел от темы. Итак, мой первый проект после прихода на должность VBAшника. Этот кейс является хорошим примером корректного использования VBA внутри отдела. Успешная его реализация сэкономила нам много человеко-часов и нервов, плюс дала важный опыт в автоматизации процесса обновления документов внутри отдела.
Важнейшим компонентом нашего отдела является калькуляция. Не углубляясь в бэкграунд, стоит просто сказать, что мой отдел занимается контролем состояния проектов, которых в лучшие времена было около сотни одновременно. Средняя длительность проекта от 5 до 8 лет. По его началу для него создается калькуляция. Она построена на базе единого шаблона, который часто обновляется, и ведется на протяжении всего проекта, вплоть до его окончания. То есть при создании проекта наиболее актуальной версией шаблона может быть, скажем, v. 1.2, а в момент окончания проекта стандартом будет уже v. 1.8. Обновления происходят примерно раз в полгода.
Интересный момент наступает в момент перехода к новому шаблону. Так, новые проекты, которые создаться после внедрения новой версии шаблона будут созданы уже на базе самой актуальной версии. А вот что делать с теми калькуляциями, которые были созданы ранее? Вариант с созданием их заново на базе наиболее актуальной версии шаблона сразу отпадает, так как каждая калькуляция чуть-чуть да индивидуальна и за время проекта обрастает своими дополнительными вспомогательными листами, комментариями и т.д. Было бы глупо заставлять работников отдела каждые полгода начинать вести все их калькуляции заново. Вариант с ручным обновлением кажется уже более реальным решением. Скажем, обновление включает в себя всего 10 мелочей, цвет фона поменять, да формулу обновить. Ну сколько тогда понадобиться времени на обновление? Минут так 10. 10 минут умножить на 100 файлов, получается 1000 минут или 16 с половиной часов, часов 18 вместе с перерывами на кофе. После увеличения минимальной почасовой заработной платы, а она в Германии особо важна для студентов, так как их труд оплачиваться почасово, средняя зарплата студента ITшника будет порядка 15-17 евро в час. То есть процесс обновления 100 файлов будет стоить фирме: 18 часов работы студента умножить на его зарплату в 15 евро в час – 270 евро. Студент на эти деньги сможет целый месяц очень хорошо питаться, а фирма этой затраты в принципе даже не почувствует.
Но что делать, если обновление большое? Скажем, в моем первом проекте в калькуляцию было привнесено около 120 новых изменений. Начиная от замены старых формул на новые и заканчивая полными изменением форматирования целых листов. Давайте повторно рассмотрим все варианты. Вариант с тем, чтобы просто пересоздать все старые калькуляции на базе нового шаблона до сих пор отпадает, работники не желают этим заниматься, а для студента, не имеющего профильные знания в этой среде, задача тяжелая. Обновление вручную? Давайте посчитаем. Возьмем за стандарт, как и в первом примере, что 1 изменение занимает 1 минуту. 120 обновлений в файле – примерно 2 часа на обновление одного документа. Обновление ста документов займет 200 часов, или при средней студенческой выработке в 16 часов в неделю – чуть более 3 месяцев. За эти 3 месяца фантастически увлекательной работы студент получит 3000 евро, это уже более болезненно для фирмы. Учитывайте дополнительно еще то, что студент реально будет 3 месяца просто обновлять калькуляции, в других сферах от него толку не будет. Для других задач нужно либо нанимать другого студента, либо все остальные поручения перекладывать на штатных сотрудников. Плюсом еще и то, что у студентов далеко не всегда все идет гладко и процесс может затянуться еще на пару недель. К тому времени подъедет и новое обновление, а должность студента можно будет официально переименовывать в «специалист по обновлению калькуляций», так как он рискует больше ничем особо и не заниматься. Знаете, что самое ужасное? Они реально так делали… Один из моих предшественников попал на более мелкий апдейт и месяца полтора провел за этим увлекательным занятием.
Какая общая логика процесса? Вместе с каждым обновлением калькуляции я получаю полный и четкий список требуемых обновлений. Например: Лист «ABC», ячейка «A1», новая формула «=СУММ(B1:B3)». То есть я могу быть уверенным, что какую бы калькуляцию я не открыл, там гарантировано будет лист ABC и именно в этом листе в ячейке A1 требуется произвести необходимое обновление. Изменения могут быть разные, какие-то проще, какие-то сложнее. Но стоит признать, что как правило в подобного рода обновлениях речь идет о базовых изменениях по типу замены формул, текста, оформления и строения таблиц. Реже речь заходит о более сложных вещах: обновление условного форматирования, работа с графиками и сводными таблицами.
Открывать файл за файлом и делать все вручную дико скучно, долго и не очень удобно. Плюс есть достаточно большой риск накосячить и даже того не заметив сделать какое-то из 120 изменений неправильно.
Нет, ну я же не зря в универе учу как избавлять людей от факсов, нужно альтернативное решение. И оно достаточно интересное. Файлы Excel можно очень удобно обновлять с помощью других файлов Excel. Хотя правильнее было бы сказать, с помощью макроса для обновления, который будет лежать в другом файле Excel. То есть можно создать своего рода файл-обновитель, внутри которого прописать полный алгоритм для совершения необходимых изменений в выбранном файле, а после использовать этот обновитель для обновления других Excel файлов. Пока не очень понятно? Сейчас поясню подробнее!
Я и далее буду использовать только что мной выдуманное слово «обновитель», так как оно мне понравилось. Общий сценарий использования макроса выглядит следующим образом:
-
Пользователь открывает Excel файл обновитель.
-
Обновитель спрашивает пользователя о том, какие именно файлы он хотел бы обновить.
-
Обновитель открывает файл и совершает в нем требуемые изменения.
-
Обновитель сохраняет измененный файл, закрывает его и переходит к следующему файлу.
-
После успешного обновления всех файлов обновитель отчитывается пользователю, что процесс обновления выбранных файлов завершен.
-
Пользователь закрывает обновитель и продолжает работу с обновленными файлами.
Вот и вся идея. Не так уж и сложно, да? Тогда посмотрим, как это выглядит в VBA. Для простоты давайте представим, что нам нужно обновить всего 1 файл и мы заранее знаем путь, где он лежит.
Сначала создаем наш файл обновитель, где будет прописан алгоритм обновления для файлов. Создаем новый VBA модуль и начинаем творить. Для начала создадим пару важных переменных:
Dim sourceFile As Workbook: Set sourceFile = ThisWorkbook ‘Создаем переменную, которая будет содержать в себе наш обновитель
Dim fileToUpdate As Workbook: Set fileToUpdate = Workbooks.Open("C:VBAFile To Update.xlsm") ‘Переменная с файлом, который необходимо обновить
Как мы ранее договорились, для простоты и ясности кода представим, что мы знаем четкий путь к файлу, который нужно обновить и он у нас всего один. На практике такое конечно оооооочень нереалистично. Напомню, нашей целью является обновить 100 документов и желательно за 1 заход! Прикрутив на этом этапе цикл можно избавить пользователя от того, чтобы он каждый раз должен был выбирать файл вручную. Сделать можно, например, так: пользователь добавляет все файлы, которые необходимо обновить, в заранее установленную папку, макрос обновителя открывает эту папку и итерируя через все файлы внутри папки обновляет их, пока не достигнет последнего файла. Способов работы с файлами множество, каждый выбирает тот, который ему по душе, я не буду приводить тут пример кода, который мы использовали в отделе. По своему опыту могу сказать, что вышеописанный вариант, использующий цикл и папку с файлами нами был отмечен как самый удобный и практичный. Сделать такой цикл не сложно и с помощью гугла процесс реализации этого функционала займет минут 30.
Дальнейшая работа будет происходить с переменной fileToUpdate, так как она представляет собой файл, который требуется обновить и через нее можно получить доступ к любой его части. Сам процесс обновления документа достаточно прост. VBA обладает огромным набором инструментов для удобной работы с элементами внутри документа. Я приведу пару простых примеров ниже, чтобы вы поняли саму суть, а дальше каждый уже сам сможет быстро и просто смастерить то, что нужно именно ему. Я скажу вам так, не было за 2 года моей практики такого обновления, которого я не смог бы автоматизировать. Что-то отнимает больше времени, что-то меньше, но все реально.
С самого начала важно активировать файл и лист, в котором необходимо провести обновление. Это проще всего сделать при помощи метода Activate. Активируем наш обновляемый файл и после этого активируем в нем лист, который требуется обновить:
fileToUpdate.Activate
fileToUpdate.Sheets(“Old_Sheet”).Activate
Вот мы и готовы обновлять выбранный лист! Нужно изменить формулу в ячейке? Без проблем, но есть важное замечание! Формулы в VBA задаются в совершенно другом формате. Чтобы перевести формулу из привычного Excel формата в синтаксис VBA можно воспользоваться функцией записи макроса. Например, в обновляемом файле вам нужно в ячейку A1 вставить формулу “СУММ(B1:B10)”. В любом Excel файле, включите запись макроса, активируйте ячейку A1 и напишите необходимую вам формулу. После этого остановите запись и откройте среду разработки. В автоматически созданном новом модуле вы увидите интерпретацию этой формулы на языке VBA, а именно:
Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[1]:R[9]C[1])"
Видите, как сильно отличается формат написания формулы? И это еще совсем простенький пример. Иногда нужно подставлять формулы длинной в 1-2 строки, такие никак кроме как через запись макроса в синтаксис VBA не переведешь.
А вот текст в ячейке проще всего изменить с помощью метода Value, давайте добавим какой-нибудь текст в ячейку A2:
Range("A2").Value = "New Text"
Нужно полностью удалить все в заданном диапазоне?
Sheets(“Old_Sheet”).Range("B1:B100").ClearContents ‘Удаление значений
Sheets(“Old_Sheet”).Range("B1:B100").ClearFormats ‘Удаление форматирования
Либо можно сразу ударить абсолютно все с заданного листа:
Sheets(“Old_Sheet”).Cells.ClearContents
Давайте еще добавим новый лист в конец книги и активируем его, чтобы соврешать в нем изменения:
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "New_Sheet"
Sheets("New_Sheet ").Select
Сделаем так, чтобы в новом листе колонка C по умолчанию была в денежном формате:
Worksheets("New_Sheet ").Columns("C:C").Select
Selection.NumberFormat = "#,##0.00 $"
Закончим подготовку нашего нового листа тем, что сделаем все будущие надписи в первой строке по умолчанию жирными:
Worksheets("New_Sheet").Rows(1).Font.Bold = True
В конце защитим его от нежелательных гостей паролем и скроем его от лишних глаз:
ActiveSheet.Protect ("Password")
Sheets("New_Sheet").Visible = False
Разберем также несколько более сложных примеров, например настройку сводных таблиц. Давайте удалим из заданной сводной таблицы с названием dataPivot все настройки строк. Для этого в начале создадим переменную, которой присвоим значение таблицы, настройки которой нужно изменить. После этого с помощью цикла пройдем через все настройки строк таблицы и уберем их:
Dim dataPivot As PivotTable : Set dataPivot = Pivot.PivotTables ( "dataPivot" )
For Each row In dataPivot.RowFields
row.Orientation = xlHidden
Next row
А теперь добавим новую строку в ту же самую сводную таблицу, которая будет представлять данные из параметра newRow:
dataPivot.PivotFields("newRow").Orientation = xlRowField
А теперь обновим все формулы в документе, чтобы быть уверенными что при следующем открытии файла пользователь увидит уже обновленные значения новых формул:
ActiveWorkbook.RefreshAll
Можно также добавлять новые элементы на страницы, например кнопки:
Sheets("New_Sheet ").Buttons.Add(10,10, 110, 37.5).Select ‘Добавляем кнопку по заданным координатам в заданный лист
Selection.OnAction = "bestMakro" ‘При нажатии на кнопку будет запущен макрос с названием bestMakro
Selection.Characters.Text = "Add a new row" ‘Надпись на кнопке
With Selection.Characters(Start:=1, Length:=9).Font ‘Установка дизайна кнопки
.Name = "Arial"
.FontStyle = "Standard"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Такие операции тоже гораздо удобнее проводить с помощью записи макроса. Просто ставите запись, создаете необходимую кнопку, останавливаете запись и получаете на выходе готовый код.
После завершения обновления файла его останется лишь сохранить под новым названием и закрыть. Параметр False в методе Close отменяет сохранение файла перед закрытием, таким образом изначальная версия не будет изменена, а версия со всеми изменения будет носить новое имя и сохранена там, где мы укажем.
fileToUpdate.SaveAs "C:VBAUpdated File.xlsm"
fileToUpdate.Close false
Я надеюсь, то маленькое количество примеров, которое я описал дало вам общее понимание того, как работает процесс обновление файлов. Сделать можно почти все что угодно, одним из главных плюсов VBA несомненно является наличие огромного количества старых добрых форумов и сайтов с туториалами, где можно найти код на все случаи жизни.
Могу сказать, что на написание макроса для обновления всех необходимых документов у меня ушло порядка 8 рабочих дней. Тоже немало, но тогда я еще только учился. Получается, что интеграция более чем 120 обновлений в сотню файлов заняла у студента около 64 часов и стоила фирме 960 евро. Поприятнее будет, чем 3000 евро за ручное обновление.
Разберем кратко главные плюсы такого способа обновления файлов.
Во-первых, — это скорость. Обновления, как правило, аналогичны друг другу, что открывает возможность использовать прекрасный и неповторимый Copy-Paste. Одна и та же функция для изменения формулы:
Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[1]:R[9]C[1])"
Используется множество раз, меняется лишь значение формулы и ячейка. Можно вынести это в отдельную функцию и быстро и красиво вызывать столько раз, сколько нужно по ходу обновления. Таким образом можно здорово ускорить реализацию рутинных шагов и большая часть времени тогда уйдет на всякие специфичные операции, типа вышеприведенного обновления сводной таблицы.
Во-вторых, гарантия того, что все файлы будут правильно и корректно обновлены. Ручное обновление – опасный процесс, в котором велика вероятность человеческой ошибки. Очень уж легко промахнуться и добавить новую формулу в неправильную ячейку или случайно присвоить новому условному форматированию неправильную настройку. Особенно когда обновление включает в себя большое количество шагов. Хорошо протестированный код обновления исключает человеческий фактор и гарантирует, что все файлы после обновления будут в одинаковом состоянии.
В-третьих, один раз качественно создав шаблон для обновления файлов его можно использовать повторно и для других документов. Данный способ показал свою эффективность и периодически используется в разных обновлениях внутри отдела, экономя нам много времени и сил. Ведь типичные действия при обновлениях, по сути, всегда одни и те же, просто под разным соусом.
Что касается минусов, то тут разве что стоит отметить достаточно долгое время выполнения макроса. Операции открытия и закрытия с сохранением тяжелых файлов достаточно ресурсоемкие и поэтому на слабеньких офисных компьютерах могут длиться достаточно долго. О том, как можно сильно ускорить выполнение макросов мы поговорим в следующей статье!
Будьте креативными! Этот способ обновления позволяет жонглировать данными внутри файлов как вам только захочется! Единственные границы – здравый смысл и ваше воображение. Я очень надеюсь, что эта статья сможет облегчить кому-нибудь жизнь так же, как в свое время эти идеи облегчили мою. Буду рад пообщаться с вами в комментах, пишите было ли интересно и информативно, а также о том, что еще вы бы хотели прочитать на тему Excel. Всем спасибо за внимание и до скорого!
My workaround is to record a Macro in the Excel file (so you have to use .xlsm file extension) (first you will need to go to Programs >> Windows Powershell and type at prompt Set-ExecutionPolicy RemoteSigned
to allow the script to run) :
Sub AutoUpdate()
'
' AutoUpdate Macro
' data refresh from MSQuery connection
'
Sheets("Feuill1").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
End Sub
Then I use a Powershell script that does the trick by : opening the Excel file, calling the macro, save and close the file.
In this example I make a copy of the original file for security/backup purpose, but of course you could save the original file itself.
$objectExcel = new-object -c excel.application
$objectExcel.displayAlerts = $false # don't prompt the user
#$objectExcel.visible = $True;
$Classeur = $objectExcel.workbooks.open("source_filepath", $null, $true)
$objectExcel.run("AutoUpdate")
# $objectExcel.run("RemoveODBC") # another custom macro for removing data connexion
$Classeur.saveas("destination_filepath")
$Classeur.close($false)
#$objectExcel.visible = $False;
$objectExcel.quit()
spps -n excel
So my Excel report is refreshed on a daily basis, without any manual intervention, by a Windows Planified task that called the above script.
Управление обновлением внешних ссылок (связей)
Смотрите такжеЗаранее спасибо. т.е. при любомApplication.Calculation = xlCalculationAutomatic “$”.В настройках «формулы» Это нужно для диапазона.содержится несколько сотен строк; Вручную, пользователь обновляетНа следующем рисунке показан
Дополнительные сведения о внешних ссылках
наличие в книге обновлять связи автоматическив группе.Существует несколько вариантов выбораЧтобы обновить связи, нажмитеПри создании внешних ссылок_Boroda_ телодвижении (кроме измененияMakintoshЕсли в ссылке — «параметры вычислений» того, чтобы активизироваласьОбласти позволяют сформировать структурупользователю нужно представлять одни
данные, нажав кнопку основной процесс обновления
самых последних данных. Буфер обменаимя связи автоматически не
в диалоговом окне кнопку (также называемых связями): а так?
Управление связями с другими книгами
цвета фона ячейки).: В настройках стоит используются символы $, нужно поставить «автоматически», «Работа со сводными сводного отчета. и те жеОбновить выбранное подключение данных, подключенных кСвязь с параметрическим запросомЭтот параметр влияет нанажмите кнопку удаляется, поэтому егоЗапрос на обновление связейПараметры можно задать для200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ВПР(A1;’G:ПАПКАКакаятокнига.xlsx’!Таблица[#Данные];2+(D1=»абв»);0) И соответственно, если автоматический пересчёт. Но
Ручное обновление всех (или никаких) связей в книге
-
то она называется если стоит другое таблицами».Сначала заполним «Названия строк». данные в разных
-
.
-
внешнему источнику. нельзя обновить без все книги, которыеКопировать может потребоваться удалить..в области сведений них поддержку и
Частичное обновление связей с другими книгами вручную
-
Стоит ли в
-
ваша функции медлительная,
-
всё равно приходится абсолютной, если символов то ячейки пересчитываютсяНа вкладке «Параметры» находим Так как нужно разрезах, выбирать информациюОбновление всех связей
-
1. когда пользователь инициирует открытия книги-источника. открываются на компьютере..
Удаление имениНа вкладке о документе, а расписание обновления. В
параметрах галка «При то это будет
-
обновлять вручную. И $ в ссылке по другим условиям.
Управление выдачей запроса на обновление всех связей
группу «Сводная таблица». вывести список книг по заданному условию,
Отключение выдачи запроса на обновление связей данной книги и обновление связей вручную
Этот параметр обновляет все операции обновления, чтобыНажмите кнопку Пользователи, которые откроютНажмите кнопкуНа вкладкеДанные затем выберите команду случае изменения значения
-
пересчете книги» «Обновлять сказываться на быстроте ещё заметил, если нет – относительной.по 2003 (могу Нажимаем – открывается по годам, то
-
группировать, а встроенный подключения к данным получить самые последние
-
Не обновлять
книгу на другомВставитьФормулыв группеВключить это содержимое в ячейке приложение ссылки на другие работы всего Excel
Настройка обновления связей по запросу при открытии файла
формула написана встроенными Адреса таких ссылок ошибиться, кажется так) меню кнопки. Выбираем
Если никакие связи не создавались
-
в этом разделе фильтр и группировка в книге при данные.. компьютере, не будут.
-
в группеПодключения.
-
Microsoft Excel не документы»?Сергей функциями Excel то называются абсолютными и
: сервис-параметры-вкладка вычисления, пункт «Параметры». должен быть перечень справляются плохо. нажатии кнопки2. обновление делает подключениеЗакройте конечную книгу. затронуты.Нажмите стрелку рядом сОпределенные именанажмите кнопку
Разрыв связей с источником
Закройте все книги. выполняет поиск новогоИ галка «Сохранять: Здравствуйте. всё хорошо автоматом относительными, соответственно. « надо поставить галочкуВ открывшемся меню «Параметры названий книг. ВТребования к исходной таблице:Обновить все подключения к источнику данных,
-
Откройте книгу-источник.На вкладке кнопкойнажмите кнопкуИзменить связиОткройте книгу, содержащую связи. значения, если это
-
значения внешних связей»?Вопрос такой - обновляется, а еслиDrshall
-
около пункта автоматически сводной таблицы» нажать списке полей ставиму каждого столбца есть
-
. часто сохранили файл
-
-
Откройте конечную книгу.ФайлПараметры вставки
-
Диспетчер имен.На вкладке
не задано пользователем.
-
Сергей в папке имеется с помощью написанной: а если адресК предыдущему ответу: кнопку «Разметка и птичку напротив поля
-
заголовок (первый вариантРегулярное обновление подключения, который определяетНажмите кнопкунажмите кнопку, а затем.
-
Нажмите кнопкуДанныеКнига, содержащая связи, называется: Галки стоят. Предложенная несколько десятков файлов пользовательской функцией то ячейки не вручную
Замена одной формулы ее вычисляемым значением
знак $ фиксирует формат». Поставить галочки «Название». Данные столбца – неправильный; второйЭтот параметр автоматически обновляет все сведения, необходимыеОбновитьПараметры выберите команду В столбце
-
Запрос на обновление связей
в группе книгой назначения, а формула вообще только эксель, таблицы с
возникает эта проблема. прописывать, а при-
значение при копировании напротив следующих пунктов:
-
имеют текстовый формат – правильный); данные интервалом времени, для доступа к.и выберите категориюЗначенияИмя.
-
Подключения книга, с которой нули выдаёт )) одинаковой структурой, ноNew
-
-
написании формулы щелкать формул, но неЗакрыть окно, нажав кнопку – автоматически попадаютзначения в одном столбце заданные автором книги. и получить данные
-
Примечание:Дополнительно .
-
выберите имя, котороеЩелкнитенажмите кнопку установлена связь, называетсяПридётся пока что разным количеством строк : А у вас
Если известно, что подключение к исходному файлу отсутствует
их влияет на пересчет, ОК. в область «Названия имеют одинаковый форматПодробнее о том, как из внешнего источникаМы стараемся как.
Если требуется работать с имеющимися данными, а не заменять их новыми
Нажмите кнопку следует удалить, иНе отображать оповещение и
Если обновление в последний раз заняло слишком много времени
Изменить связи исходной книгой. Если 30+ файлов открывать, + один файл в написанных функцияхMakintosh цитатка из хелпаЕще один вариант: строк». К значениям (число, дата, текст); определить подключения к данных. можно оперативнее обеспечиватьВ Excel 2007 нажмитеНе обновлять нажмите кнопку не обновлять автоматические
Если эта книга создана другим пользователем и вы не знаете, почему появился этот запрос
. открытая книга (конечный чтобы значения в в который вытягиваются есть строка ?: Уважаемые знатоки. Вот»При копировании формулОткрыть лист со сводным сразу применяется сортировкавсе ячейки в строках внешним источникам данных3. существует различных источников вас актуальными справочными
Если вы каждый раз одинаково отвечаете на этот запрос и хотите, чтобы он больше не отображался
кнопку Microsoft Office. Обновление из источникаУдалить связи
Из списка файл) содержит связи нужном собрать =)
определенные значения изApplication.Volatile столкнулся с такой возникает необходимость управлять отчетом. На вкладке по алфавиту. и столбцах заполнены
-
в книге Excel данных, которые вы материалами на вашем, щелкните при отсутствии подключения..
Источник с другими книгами Хорошо, что это этих таблиц. ВMakintosh проблемой. изменением адресов ячеек
-
«Разработчик» нажать кнопкуТеперь ставим птичку напротив значениями; читайте в статье можете получать доступ, языке. Эта страницаПараметры Excel к нему невозможно.Если используется диапазон внешних
Возможно, связь была созданавыберите связанный объект, или файлами (которые
нечасто требуется. этом файле более: Нет, такой строкиЗначение ячейки А1 или ссылок. Для «Запись макроса». поля «Год выпуска».данные из одной ячейки подключение к внешним
-
таких как OLAP, переведена автоматически, поэтомуи выберите категорию Например, если книга-источник данных, параметр запроса случайно путем перемещения который необходимо изменить.
-
называются исходными файлами),Спасибо за внимание! 5к строк. Для
-
нету.
на Листе1 зависит этого перед символамиВыполнить вручную обновление своднойСводная таблица сделана. С
Если известно, что исходный файл доступен для подключения к нему
нельзя разнести в данным (импорт) в SQL Server, данных ее текст можетДополнительно
Если используется параметрический запрос
расположена в сети, может также использовать или копирования диапазона
-
Для выделения нескольких связей а исходные файлыSerge_007
-
вытягивания использую формулу:
-
R Dmitry
-
от значения ячейки
-
адреса ячейки или таблицы – остановить помощью нескольких кликов.
support.office.com
Обновление внешних данных в книге, открытой в браузере
разные столбцы (без справочной системе Microsoft OLEDB и драйверы содержать неточности и. а подключение к данные из другой ячеек, листа или щелкните каждый связанный изменятся, то связи: Значит работает, иначеФормула работает, всё,: Нет, такой строки В2 на Листе2. ссылки устанавливаются символы запись. Нажать на Такой способ представления объединения ячеек). Excel. ODBC. грамматические ошибки. ДляВ разделе
сети отсутствует. книги. Может потребоваться диаграммы из одной объект, удерживая нажатой в открываемой книге было-бы значение ошибки что нужно вытягивает. нету.{/post}{/quote} Вот если поменять “$”. Изменяться только кнопку «Макросы». Выбрать информации удобен дляНерациональная организация информации:Чтобы обновить данные из4. обновление добавляет самых нас важно, чтобыОбщиеНажмите кнопку проверить и удалить книги в другую. клавишу CTRL.
В этой статье
могут указывать на
#ССЫЛКА! Проблема в том,
Function нннннн() значение В2 а
Узнайте об обновлении данных
те атрибуты адреса из доступных макросов финансовых отчетов.Нельзя будет вывести итоги,
внешнего источника данных последних данных в эта статья быласнимите флажок
Не обновлять эти типы связей. Откройте книгу, аЧтобы выделить все связи, устаревшие данные.Сергей что при первомApplication.Volatile True потом перейти на
ячейки, перед которыми записанный – «выполнить».От сводной таблицы больше например, только по в книге, открытой книге. вам полезна. Просим
Запрашивать об обновлении автоматических.В Excel формула удаляется
затем найдите ненужные
Параметры для обновления данных Excel
нажмите клавиши CTRL+A.1. Конечная книга содержит: Увы, пока Какуютокнигу открытии вместо значения… лист1 то ячейка не стоит символТеперь сводный отчет при пользы, если она городу. в браузере, выполнитеК началу страницы вас уделить пару связейНажмите кнопку при замене на связи и разорвитеНажмите кнопку внешние ссылки.
не открыть также выдаётся… А1 не обновляется. “$”. Если перед открытии будет обновляться
динамическая. То есть |
Лучше значения ввести следующим |
следующие действия. |
Не удается определить информации, секунд и сообщить,. Если этот флажок |
Не обновлять |
возвращаемое значение. Чтобы их или заменитеОбновить значения2. Внешняя ссылка (или выдает #ССЫЛКА!, аQuote |
… |
И что бы всеми атрибутами адреса программно. при внесении новых таким образом.Откройте книгу, содержащую данные, |
необходимой для подключения |
помогла ли она снят, связи будут. Если не требуется |
отменить случайную замену их значениями.. связь) представляет собой затем меняет на200?’200px’:»+(this.scrollHeight+5)+’px’);»>#ССЫЛКА! и необходимо открыть/закрытьmyFunction=… обновить данные нужно ячейки поставить символ
Обновление данных из внешнего источника данных
Есть например ячейка A1, данных в исходный которые вы хотите к внешнему источнику
-
вам, с помощью обновляться автоматически (без получение текущих данных,
-
формулы ее значением,Важно:Можно настроить автоматическое обновление
-
ссылку на диапазон нули. Проблема именно
-
все книги, чтобыEnd Function кликнуть 2 раза “$”, то при в которую берутся
-
диапазон поля отчетаЧтобы создать сводную таблицу обновить. данных в книге кнопок внизу страницы.
выдачи запроса).
support.office.com
Обновление данных в сводных таблицах Excel
можно сэкономить время, немедленно после ввода При разрыве связей с связей при запуске ячеек в книге-источнике. в невозможности по собрать данные. ВNew по ячейке А1 копировании формулы ссылка
О целесообразности и возможности сводных таблиц
данных из ячейки можно обновить. Как в качестве исходногоЩелкните значок
- при работе в
- Для удобства такжеОдинаковый запрос для всех не обновляя все или вставки значения источником все формулы, или после запуска.3. Книга-источник содержит ячейку, какой-то причине вытащить
интернете встречал решения
- : А вы попробуйте и нажать на не изменится. F1 по формуле
- это сделать? диапазона возьмем каталогданных
- браузере. У вас приводим ссылку на пользователей этой книги
- связи. После открытия нажмите кнопку использующие источник, заменяютсяПредупреждение:
значение из которой
данные из файлов, на ВБА, но добавьте её сразу
Enter. Может можноНапример, если в
=F1. По каким-то
Как сделать сводную таблицу в Excel
Вручную: учебной литературы:на панели инструментов. открыть книгу в
оригинал (на английском книги нажмите наОтменить на их текущее Этот режим влияет на загружается и помещается которые ещё не я в нём
- первой строкой под написать код который записи формулы ссылку причинам иногда послеКогда данные внесены вПодразумевается, что данная таблица
- Выполните одно из указанных Microsoft Excel 2010 языке) .Предупреждение: вкладке.
- значение. Например, связь всех пользователей книги. в конечную книгу. открывались в эту не разбираюсь и, названием функции, вот бы обновлял все
- на ячейку D7 изменения данных в
- исходную таблицу, переходим состоит из сотен ниже действий. для определения сведенийПри использовании книги в Этот режим влияет наДанныеВыделите ячейку с формулой. =СУММ([Бюджет.xls]Годовой!C10:C25) будет заменена Если отключить обновлениеКогда обе связанные книги сессию. так как решения так формулы на листе. записать в виде
- ячейке F1 данные на лист со
строк. Создадим сводныйУстановите флажок о подключении и браузере, средство просмотра всех пользователей книги.
Как обновить сводную таблицу в Excel
в группеЕсли формула является на =45. Эту связей и выдачу открыты на одномNad_Serg для единичной книгиFunction МояСуперФункция()
Подскажите, как можно
- $D7, то при в ячейке A1 сводным отчетом и отчет для выведенияОбновить все подключения другие параметры, например веб-отображает данные, либо Если отключить обновлениеПодключения
- формула массива, выделите операцию нельзя отменить, запроса, пользователи этой компьютере, связи обновляются: Сергей, я избавилась не могу сообразить,Application.Volatile
- решить данную проблему. перемещении формулы будет не меняются автоматически, щелкаем в любом
списка книг изобновить все подключения способ отображения данных,
- хранится непосредственно в связей и выдачукнопку диапазон ячеек, содержащих поэтому стоит сохранить книги не будут автоматически. Когда конечная от этой проблемы
- что мне нужно’ля-ля-ляЗаранее огромное спасибо! изменяться только номер а изменяются только
- его месте правой конкретной категории или к данным в который требуется обновить. книге, или в
запроса, пользователи этойИзменить связи
формулу массива.
- версию файла знать, что данные книга открыта, а убрав все флажки
- сделать, чтобы данные’ля-ля-ляNew строки “7”. Запись после захода в кнопкой мыши. В
определенного года. Задача книге Во время настройки
exceltable.com
Обновление данных в Excel
внешнему источнику данных, книги не будут, а затем обновитеВыбор диапазона, содержащего массив. устарели. книга-источник не открыта, (галочки) в на со всей кучиEnd Function: А версия Excel D$7 означает, что ячейку A1 вручную открывшемся меню выбираем сформулирована – перейдемВыберите команду в Excel 2010, таких как базы знать, что данные связи только с
На вкладкеНа вкладке в области сведений вкладке «защищенный просмотр»
моих файлов подгружалисьвдруг поможет какая? Пересчёт какой
при перемещении будет и нажатия Enter. «Обновить». к реализации.
Обновить выбранное подключение при публикации книги данных или в устарели. нужными исходными файлами.Щелкните любую ячейку в
ДанныеДанные о документе возможно в «параметрах безопасности» в файл-сборщик :(
Makintosh стоит? Если ручной, изменяться только символ Когда таких ячеекАктивизируем нужное поле сводногоАктивизируем любую ячейку в
для обновления определенного в Microsoft SharePoint кубе интерактивной аналитическойНа вкладкеНажмите кнопку диапазоне массив.в группев группе появление запроса на (см файл)Есть ли сравнительно: Ребята, вы просто то поставьте Автоматический. столбца “D”. Если много, то выполнение отчета – становится исходном диапазоне –
подключения для сводной Server 2010 сохраняются обработки (OLAP). ЕслиДанныеНе обновлятьНа вкладкеПодключенияПодключения обновление связей. МожноСергей простое решение? мозги. Всё помогло.В Excel 2003 же записать адрес обновления всех данных доступен инструмент «Работа щелкаем мышкой. Переходим таблицы. параметры. книгу, которую выв группе. Обратитесь к владельцуГлавнаянажмите кнопкунажмите кнопку задать режим вывода: Помогло изменение формулы.П.С. Ранее структура Добавил строчку Application.Volatile
— Сервис - в виде $D$7, вручную затруднительно. Как со сводными таблицами». на вкладку «Вставка»К началу страницыВ таблице ниже приведены используете содержит данныеПодключения
книги. Вы такжев группеИзменить связиИзменить связи этого запроса, а Вместо таблицы использовал
Не обновляются автоматически данные
таблиц была проще и всё хорошо Параметры — Вычисления то ссылка при
автометичски обновить все Открываем вкладку «Параметры». — «Таблица». НажимаемБольшой диапазон данных в краткое описание обновления из внешнего источниканажмите кнопку можете выяснить, какиеРедактирование.. также режим обновления диапазон. и для вытягивания стало. — Автоматически перемещении формулы на данные? В группе «Данные» кнопку «Сводная таблица».
таблице Excel рационально
данных, которые можно данных, вы можетеИзменить связи связи находятся внажмите кнопку
В спискеНажмите кнопку всех связей безСтарая
значений я использовалNewNew этот адрес неВаш песец нажимаем кнопку «Обновить».
Автоматически выделяется весь диапазон. представить в виде выбрать при настройке
обновить данные. Эта. книге. На вкладке
Найти и выделить
ИсточникЗапрос на обновление связей вывода запроса. КромеНовая формулу:: Мы такие )): Если Excel 2010 изменится, и в: а если простоВыделить сводную таблицу или Открывается диалоговое окно сводного отчета. Структура подключений к данным
операция извлекает самаяНажмите кнопкуДанныеи выберите команду
выберите связь, которую
. того, если книгаQuote
Quote Только учтите, что — вкладка Формулы
расчетах будут участвовать
страницу обновить, сохранив
отдельное поле, нажать
инструмента. Необходимо проверить
данного инструмента позволяет
в Microsoft Excel.
новая версия данных,
Запрос на обновление связейв группеВыделить группу ячеек требуется разорвать.Выберите нужный режим. содержит несколько связей,
200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(D1=»абв»;ВПР(A1;’G:ПАПКА[Какаятокнига.xlsx]Лист1′!A1:F10;2;ЛОЖЬ);ВПР(A1;’G:ПАПКА[Какаятокнига.xlsx]Лист1′!A1:F10;3;ЛОЖЬ))
200?’200px’:»+(this.scrollHeight+5)+’px’);»>=’G:ПАПКА[Какаятокнига.xlsx]Лист1′!A1
написав эту строку
— (справа вверху)
данные из ячейки
перед этим? не
сочетание клавиш Alt правильность параметров для получить быстрый доступПараметр обновления который включает в.
Подключения.Для выделения нескольких связанныхПримечание: можно обновлять толькоПолучается, что эксельИспользование этой формулы в вашей функции, Параметры вычисления - D7. Если в помогает? + F5. отчета (диапазон, куда к итогам, информацииОписание себя все изменения,Выберите нужный режим.нажмите кнопкуВ диалоговом окне объектов щелкните каждый
planetaexcel.ru
Обновление данных при открытии книги (Как взять данные из соседних книг эксель, не открывая их?)
Даже если запретить Excel некоторые из них.
не видит таблицы не требовало открытия ваша функция стала выбрать Автоматически формуле указан интервалЕвгений береговКак настроить автоматическое обновление выводить сводную таблицу). по определенному параметру.Обновить при открытии внесенные с моментаПримечание:Изменить связи
Выделить группу ячеек из них, удерживая выдавать запрос наЗакройте все книги. Если в закрытом файле, всех основных файлов. «летучей», т.е. онаR Dmitry ячеек G3:L9, то: попробуй поставить не сводной таблицы вОткрывается окно для построения Рассмотрим создание иСредство просмотра автоматическое обновление последнего обновления данных. При наличии разорванных связей.установите флажок нажатой клавишу CTRL. обновление связей, пользователь одна книга-источник будет но видит диапазоны.
П.П.С. Если решением теперь всегда будет
: может стоит включить управлять можно каждым =Ф1 а =Ф$1 Excel: отчета, список полей.
обновление сводных таблиц. внешних данных при
Узнайте об обновлении данных будет появляться оповещениеМожно ответить на запрос
Текущий массивЧтобы выделить все связи, будет получать сообщения открыта, а остальные По крайней мере
будет изменение формулы,
пересчитываться при любом автоматическое вычисления?
из четырех символов:
Алексей масловОткрыть лист со сводным В правой нижнейОптимально формировать сводный отчет открытии книги.
Параметры для обновления данных об этом.
и запретить его. нажмите клавиши CTRL+A. о наличии разорванных
закрыты, обновления не у меня. также буду благодарен. изменении на листе,New “G”, “3”, “L”
: В следующий раз
отчетом. Щелкнуть в части страницы – на основе исходнойОбновление вручную
ExcelНажмите кнопку вывод для этойНа вкладкеЩелкните элемент связей будут одинаковыми.Спасибо всем кто Может просто не в книге, в: Можно это сделать и “9”, помещая
пишите из какого любом месте таблицы области для размещения таблицы, если онаЭтот параметр применяется толькоОбновление данных из внешнегоОбновить книги в будущем.
ГлавнаяРазорвать.Откройте книгу, содержащую связи.
откликнулся!
могу сообразить чего-то.
другой открытой книги, макросом
перед ними символ офиса ексель ))) левой кнопкой мыши. данных из исходного отвечает следующим параметрам: к сводным таблицам.
источника данных. Это позволит гарантировать
excelworld.ru
Не отображать запрос и
Один хороший человек на этом же форуме выложил следующий macros. Позарез нужно его применение, но не получается. Может потому, что я настолько далек от всего этого.
Макрос помогает сделать обновление файла не открывая его вручную (все как я понял делается из исходного файла за раз).
ВОТ КАК БЫЛО СКАЗАНО:
[vba]
Код
Sub update()
With Application ‘операции с приложением/отключаем для повышения скорости работы макроса
.ScreenUpdating = False ‘обновление экрана
.DisplayAlerts = False ‘вывод системных сообщений
Папка = «полный путь папки»
‘———— Excel-файлы в этой папке ——————
Имя = Dir(Папка & «*.xls*»)
Do While Имя <> «»
With .Workbooks.Open _
(Filename:=Папка & Имя, UpdateLinks:=True)
‘здесь Ваш макрос делает свое грязное дело
.Close SaveChanges:=True
End With
Имя = Dir
Loop
.ScreenUpdating = True ‘обновление экрана
.DisplayAlerts = True ‘вывод системных сообщений
End With
End Sub
[/vba]
ВОТ КАК БЫЛО СДЕЛАНО:
[vba]
Код
Sub update()
With Application
.ScreenUpdating = False
.DisplayAlerts = False
Test2 = «C:Test22.xlsx»
Testing = Dir(Test2 & «2.xls»)
Do While Testing <> «»
With .Workbooks.Open _
(Filename:=Test2 & 2, UpdateLinks:=True)
.Close SaveChanges:=True
End With
Имя = Dir
Loop
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub
[/vba]
Предварительно активировал макросы и сделал их доступными. Потом зашел в Visual Basic нажал Insert — Module. Появилось окошко, куда и вставил выше описанный макрос. Жму Play ниче не происходит(думал, что операция маленькая может быстро сделал). Закрыл все сохраняя (но при сохранении были кучи каких-то надписей). Зашел в нужный файл который должен был обновиться, но он не обновился НИЧЕРТА!