Обновить файл vba 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 файлов. Пока не очень понятно? Сейчас поясню подробнее!

Я и далее буду использовать только что мной выдуманное слово «обновитель», так как оно мне понравилось. Общий сценарий использования макроса выглядит следующим образом:

  1. Пользователь открывает Excel файл обновитель.

  2. Обновитель спрашивает пользователя о том, какие именно файлы он хотел бы обновить.

  3. Обновитель открывает файл и совершает в нем требуемые изменения.

  4. Обновитель сохраняет измененный файл, закрывает его и переходит к следующему файлу.

  5. После успешного обновления всех файлов обновитель отчитывается пользователю, что процесс обновления выбранных файлов завершен.

  6. Пользователь закрывает обновитель и продолжает работу с обновленными файлами.

Вот и вся идея. Не так уж и сложно, да? Тогда посмотрим, как это выглядит в 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. Всем спасибо за внимание и до скорого!

!!!!! ОБНОВЛЕНИЕ ФАЙЛОВ БЕЗ ОТКРЫТИЯ!!!!!

ELLE

Дата: Вторник, 18.09.2012, 12:54 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Доброго времени суток!
Помогите пожалуйста!!!!
Имеется группа экселевских файлов (около 400), данные из которых сводятся в отдельном файле.
Данные в каждом файле зависят от даты, которая забивается в сводном файле, и на которую ссылаются эти отдельные файлы.
Как сделать так, чтобы дата (или ссылка) в тих файлах обновлялась автоматически без открытия файла???
Или, может, есть какая-то программка, которая бы запускала обновление этих файлов в определенное время?

 

Ответить

Serge_007

Дата: Вторник, 18.09.2012, 12:57 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Без открытия, боюсь, не получится. Но можно открывать файлы в фоновом режиме, так что пользователь этого не увидит


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

ELLE

Дата: Вторник, 18.09.2012, 13:47 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Serge_007, что значит открывать в фоновом режиме?
Я в excel новичок, можно сказать! Только учусь!

 

Ответить

Hugo

Дата: Вторник, 18.09.2012, 14:29 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Нашёл в закромах — откуда взял, не записано…

[vba]

Code

==============================================================
Применение макроса ко всем файлам из папки    
Папка = «полный путь папки»

                       ‘———— Excel-файлы в этой папке ——————
               Имя = Dir(Папка & «*.xls*»)
         Do While Имя <> «»
               Workbooks.Open FileName:=Папка & Имя , UpdateLinks:=True
               ‘здесь Ваш макрос делает свое грязное дело
               ActiveWorkbook.Close SaveChanges:=True
            Имя = Dir
         Loop

==============================================================

[/vba]

С доработкой вероятно так:
[vba]

Code

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]


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

ELLE

Дата: Вторник, 18.09.2012, 14:32 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Hugo, спасибо большое! Только не могли бы Вы еще объяснить как создать макрос более подробно. что за чем.
ищу в сети, не могу найти.
не так много времени.
заранее спасибо!

 

Ответить

Hugo

Дата: Вторник, 18.09.2012, 14:43 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Подробнее тут:
http://www.excelworld.ru/publ/vba/first_step/excel_macro/39-1-0-114

Освоите простой код — можете попробовать этот (но сперва на тестовых файлах, или на копии рабочих в спецпапке).
Путь к папке пропишите вместо
Папка = «полный путь папки»
например
Папка = «C:TMPспецпапка»


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

ELLE

Дата: Вторник, 18.09.2012, 15:40 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 4


Репутация:

0

±

Замечаний:
0% ±


Hugo, спасибо!
попробую!

 

Ответить

Margot

Дата: Понедельник, 09.10.2017, 16:54 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Здравствуйте,

Можете ли вы пояснить поподробнее код данный выше?
[vba]

Код

Sub update()
With Application ‘операции с приложением/отключаем для повышения скорости работы макроса
.ScreenUpdating = False ‘обновление экрана
.DisplayAlerts = False ‘вывод системных сообщений

[/vba]
Папка (имеется ввиду что надо прописать имя папки ?)= «полный путь папки»
‘———— Excel-файлы в этой папке ——————
Имя (о каком имени тут идет речь?)= Dir(Папка & «*.xls*») (имя папки & «*.xls*»?)
Do While Имя (каком имени тут идет речь?) <> «»
[vba]

Код

With .Workbooks.Open _
(Filename:=Папка & Имя, UpdateLinks:=True)
‘здесь Ваш макрос делает свое грязное дело
.Close SaveChanges:=True
End With
Имя = Dir
Loop
.ScreenUpdating = True ‘обновление экрана
.DisplayAlerts = True ‘вывод системных сообщений
End With
End Sub

[/vba]

Извините за такие вопросы, но это единственное место где я нашла код на обновление файлов без открытия и так как я совсем новичок в работе с макросами не могу понять как его применить.

Спасибо за помощь!

 

Ответить

buchlotnik

Дата: Понедельник, 09.10.2017, 16:58 |
Сообщение № 9

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

Сообщение отредактировал _Boroda_Понедельник, 09.10.2017, 17:00

 

Ответить

_Boroda_

Дата: Понедельник, 09.10.2017, 16:59 |
Сообщение № 10

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

— Прочитайте Правила форума
— Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #)

И что значит

? —


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Margot

Дата: Понедельник, 09.10.2017, 17:40 |
Сообщение № 11

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Цитата

И что значит
Цитата Margot, 09.10.2017 в 16:54, в сообщении № 8 ( писал(а)):
пояснить поподробнее код
? —

Имеется ввиду что нужно писать на месте слов «Папка» и «Имя»:

Я написала этот код таким образом,что подставила вместо слова «папка» имя папки,где находятся файлы, которые нужно обновить (macrosMAJ) и вместо «Имя» — имя файла в котором изменяются данные (origine):

[vba]

Код

Sub update()
    With Application   
        .ScreenUpdating = False    
        .DisplayAlerts = False    
        macrosMAJ = «C:Users…macrosMAJ»

              origine = Dir(macrosMAJ & «*.xls*»)
        Do While macrosMAJ <> «»
            With .Workbooks.Open _
                (Filename:=macrosMAJ & origine, UpdateLinks:=True)
                .Close SaveChanges:=True
            End With
            origine = Dir
        Loop
        .ScreenUpdating = True   
        .DisplayAlerts = True    
    End With
End Sub

[/vba]

Но код не работает и подчеркивает ошибку в строке :

[vba]

Код

With .Workbooks.Open _
                (Filename:=macrosMAJ & origine, UpdateLinks:=True)

[/vba]

Сообщение отредактировал MargotВторник, 10.10.2017, 10:06

 

Ответить

_Boroda_

Дата: Понедельник, 09.10.2017, 17:42 |
Сообщение № 12

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

— Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #)


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Margot

Дата: Понедельник, 09.10.2017, 17:59 |
Сообщение № 13

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Цитата

— Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #)

я сделала как вы просили, но весь код заменяется на знак #

 

Ответить

_Boroda_

Дата: Понедельник, 09.10.2017, 19:58 |
Сообщение № 14

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

А Вы где кнопку нажимаете? На клавиатуре?
Нужно на панели. Вот здесь

К сообщению приложен файл:

4380908.jpg
(24.0 Kb)


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Margot

Дата: Вторник, 10.10.2017, 10:08 |
Сообщение № 15

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Спасибо за объяснение)) исправила

 

Ответить

_Boroda_

Дата: Вторник, 10.10.2017, 10:20 |
Сообщение № 16

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

А теперь я Вас огорчу — видите в макросе строчку
[vba][/vba]? Так вот, эта строка ОТКРЫВАЕТ файл

Ну и ответы на Ваши вопросы —
1. нужно присвоить переменной «папка» значение полного пути к той папке, где лежит файл. Примерно вот так
[vba]

Код

Папка = «c:UsersМояПрочееДля_Excel»

[/vba]
2. [vba]

Код

Имя = Dir(Папка & «*.xls*»)

[/vba] «Имя» — это переменная. С тем же успехом можно было назвать «Imya». Кстати, как и «папка». Просто автор макроса посчитал, что так будет понятнее


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Margot

Дата: Вторник, 10.10.2017, 11:17 |
Сообщение № 17

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Спасибо за ответ!Теперь это понятно.

Переделала, но все равно строчка с «With Workbooks.Open Filename» подчеркивается :

[vba]

Код

Sub update()
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        macrosMAJ = «C:UsersE500892…macrosMAJ»

            origine = Dir(macrosMAJ & «*.xls*»)
        Do While origine <> «»
           With Workbooks.Open Filename:=macrosMAJ & origine, UpdateLinks:=True
                .Close SaveChanges:=True
            End With
            origine = Dir
        Loop
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub

[/vba]

 

Ответить

Фомулист

Дата: Вторник, 10.10.2017, 11:23 |
Сообщение № 18

Группа: Проверенные

Ранг: Обитатель

Сообщений: 385


Репутация:

9

±

Замечаний:
60% ±


Excel 2003

[vba]

Код

«C:UsersE500892…macrosMAJ»

[/vba]

Потому, что это не полный путь к файлу. «…» в пути быть не должно. Скопируйте и вставьте именно полный путь к папке.


Терпение и труд всё перетрут!

Сообщение отредактировал ФомулистВторник, 10.10.2017, 11:25

 

Ответить

_Boroda_

Дата: Вторник, 10.10.2017, 11:23 |
Сообщение № 19

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Конечно. Слеш забыли

macrosMAJ = «C:UsersE500892…macrosMAJ»

Папка = «c:UsersМояПрочееДля_Excel»


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Margot

Дата: Вторник, 10.10.2017, 11:44 |
Сообщение № 20

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Исправила как вы написали, но опять не работает и та же строчка с «With Workbooks.Open Filename» подчеркнута:

[vba]

Код

Sub update()
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        macrosMAJ = «C:UsersE500892DesktopFichier de SUIVIMBAV BarèmesmacrosMAJ»

                origine = Dir(macrosMAJ & «*.xls*»)
        Do While origine <> «»
            With Workbooks.Open Filename:=macrosMAJ & origine, UpdateLinks:=True
                .Close SaveChanges:=True
            End With
            origine = Dir
        Loop
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub

[/vba]

 

Ответить

279 / 156 / 52

Регистрация: 30.06.2011

Сообщений: 1,712

1

28.01.2016, 21:50. Показов 8905. Ответов 10


Студворк — интернет-сервис помощи студентам

Привет всем. Ситуация такая. Есть сетевая папка, в которой лежит книга Excel 2010. Эту книгу разрешено открывать и изменять нескольким пользователям одновременно (установлена галка Разрешить изменять файл несколькими пользователями…). Допустим, что книга открыта с двух компьютеров. На одном из компьютеров в ячейку А1 вводится текст и файл сохраняется.

Вопрос: какой надо выполнить код на первом компьютере, чтобы в этой ячейке текст отобразился?

Я пока нашел единственное решение: необходимо выполнить сохранение файла. Но может быть есть другой способ?



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

28.01.2016, 21:50

10

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

28.01.2016, 23:44

2

d7d1c, перед изменением файла имеет смысл выполнить команду «Обновить файл» (соотв. кнопку можно вытащить на ПБД, я к сожалению не знаю, какая команда VBA ей соответствует), а после изменения сохранить. При таком порядке действий вероятность конфликта будет минимальной.



1



279 / 156 / 52

Регистрация: 30.06.2011

Сообщений: 1,712

29.01.2016, 08:09

 [ТС]

3

Казанский, спасибо за информацию о команде «Обновить файл». Это именно то, что мне надо. Попробовал сделать запись макроса при выполнении этой команды, однако Excel не выдает секретов: записанная процедура оказалась пустой
Может быть в VBA нет аналогичного кода? Или же все команды, доступные с кнопок, можно выполнить программным кодом?



0



Burk

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

29.01.2016, 12:46

4

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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

Visual Basic
1
2
3
4
5
6
7
Sub ProbaPera()
ThisWorkbook.Save
Nst = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row + 1
MsgBox Nst
Cells(Nst, 1) = 98765
ThisWorkbook.Save
End Sub

Добавлено через 4 минуты
P.S. Я также выставил опцию НЕ ХРАНИТЬ ЖУРНАЛ ИЗМЕНЕНИЙ Burk



0



279 / 156 / 52

Регистрация: 30.06.2011

Сообщений: 1,712

29.01.2016, 13:19

 [ТС]

5

Burk, если Вы не обратили внимание, то я повторюсь: «Я пока нашел единственное решение: необходимо выполнить сохранение файла.» Так что Ваше решение — это то же решение, что и у меня.

Но все равно есть к Вам вопрос: как в общем файле сделать обновление без сохранения и как не хранить журнал изменений?



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

30.01.2016, 14:27

6

d7d1c, думаю,что немедленное обновление без сохранения невозможно, я всяко пытался не получилось и не должно получится, если вас устраивает обновление по времени (минимум 5 минут), то можно и без сохранения.
Правда, когда работают несколько человек, неизбежны наложения (конфликт записи). Всё это на вкладке ПОДРОБНЕЕ, там же опция НЕ ХРАНИТЬ ЖУРНАЛ ИЗМЕНЕНИЙ. Burk



0



279 / 156 / 52

Регистрация: 30.06.2011

Сообщений: 1,712

01.02.2016, 07:50

 [ТС]

7

Цитата
Сообщение от Burk
Посмотреть сообщение

d7d1c, думаю,что немедленное обновление без сохранения невозможно, я всяко пытался не получилось и не должно получится

Немедленное обновление без сохранения возможно, но только вручную (нажатием кнопки «Обновить файл» в Excel). Вопрос: а почему «не должно получится»?



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

17.02.2016, 09:32

8

d7d1c, ПОДРОБНЕЕ находится там же, где вы выставляете ОБЩИЙ ДОСТУП к КНИГЕ: Рецензирование -> Доступ к книге -> и открывается окно управления доступом, в котором есть вкладка ПОДРОБНЕЕ. Это в 2007, но не думаю, что десятка чем-то существенно отличается. Задержался с ответом. Burk



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

13.03.2016, 11:38

9

d7d1c, Burk,

Цитата
Сообщение от другой форум

кому-нибудь в будущем понадобится макрокоманда, заменяющая нажатие на кнопку «Обновить файл» при работе в расшаренной книге (shared workbook):

.acceptallchanges

Пример:

Visual Basic
1
2
ActiveWorkBook.acceptallchanges 
ThisWorkBook.acceptallchanges



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

14.03.2016, 12:02

10

Для Казанского.
Да не получается что-то с AcceptAllChanges. У меня задача в общем файле программно найти пустую строку и в неё занести данные тоже программно. С использованием метода Save это получилось, как я и писал ранее. Выдаёт номер пустой строки с учётом введённых данных другим Юзером, хотя на экране его изменения появляются только при записи своих. Посылаю два файла: ProbaSave по моей методике, SaveCommonExample с использованием AcceptAllChanges (даже DoEvents вставил). В обоих файлах есть макросы с занесением информации в свободную строку и вывод номера этой строки на экран. Будет время, посмотрите. С уважением Burk



0



279 / 156 / 52

Регистрация: 30.06.2011

Сообщений: 1,712

01.04.2016, 09:42

 [ТС]

11

Казанский, спасибо Вам за помощь! Все работает.



0



 

Ga

Пользователь

Сообщений: 7
Регистрация: 25.10.2021

Добрый день. Подскажите, в какую сторону смотреть?
Есть файл экселя, лежит в одном месте, называется одинаково. Его надо обновлять (актуализировать данные из сторонних источников) и сохранять два раза в день по расписанию.
Хочется автоматизировать.
Какую-нибудь приблуду, которая обновляет файл, а если не получится еще и журнал ошибок выдала или как-нибудь иначе отругалась.

Может кто-то встречал такое? Или в какую сторону рыть?  

 
Вариант 1 БЕСПЛАТНО ПРИ НАЛИЧИИ ЗНАНИЙ

1. Планировщик заданий в винде настраиваете на открытие этого файла в определенное время. (гугл поможет)
2. пишите макрос для файла, с реакцией на открытие и обновление данных(с созданием журнала ошибок, и прочих ваших хотелок) и закрытие файла после обновления с сохранением.

Вариант 2 БЕСПЛАТНО БЕЗ ЗНАНИЙ НО ОЧЕНЬ ТРУДОЗАТРАТНО И ПРИДЁТСЯ ВО ВСЁ ВНИКАТЬ

1. Планировщик заданий в винде настраиваете на открытие этого файла в определенное время. (гугл поможет)
2. если не знаете как всё это написать, разбиваете задачу на большое пунктов, на каждый пункт вашего не понимания 1 вопрос — 1 тема на форуме.

Вариант 3 ПЛАТНО ОСОБО ДУМАТЬ НЕ НАДО

1.Описываем желаемое подробно насколько это получится (Тех задание)
2.Идём сюда

РАБОТА ПЛАТНО

создаём тему, договариваемся с исполнителем.

Изменено: Wild.Godlike14.09.2022 14:00:05

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#3

14.09.2022 13:53:32

Цитата
Ga написал: Или в какую сторону рыть?

Писать подробное ТЗ и размещать в разделе «Работа». Волшебной универсальной кнопки не существует.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Ga

Пользователь

Сообщений: 7
Регистрация: 25.10.2021

#4

14.09.2022 14:24:50

Цитата
написал:
Планировщик заданий в винде настраиваете на открытие этого файла в определенное время. (гугл поможет)

Спасибо за ответ!
Если я правильно поняла, почитав, планировщик именно откроет мне этот файл на компе, мне же надо, что бы все произошло в фоновом режиме. Что бы файл обновлялся самостоятельно. А так это от части хороший вариант, я настрою источники на обновление при открытии файла, но все же придется присутствовать. Как минимум сохранить и закрыть
Макрос внутри файла может работать по расписанию без открытия файла?
Видимо, мне нужно что-то стороннее, что будет открывать файл в фоновом режиме и потом сохранять его через определенное время.  

 

Ga

Пользователь

Сообщений: 7
Регистрация: 25.10.2021

#5

14.09.2022 14:28:55

Цитата
написал:
Писать подробное ТЗ и размещать в разделе «Работа». Волшебной универсальной кнопки не существует.

JayBhagavan, если бы мне выделили бюджет на решение этой задачи, я бы так и поступила.

Сейчас меня скорее интересует есть ли уже готовые решения. Наверняка, это распространенное желание. Ты настроил отчет, но хочешь, что бы он без тебя актуализировался. Как в Power BI.

 

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

Изменено: Ігор Гончаренко14.09.2022 15:29:55

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

whateverlover

Пользователь

Сообщений: 435
Регистрация: 15.06.2018

#7

14.09.2022 16:05:13

Ga, у меня что-то такое наколхожено.
Сделал bat’ник с таким кодом и закинул его в планировщик. Каждый день в 5:30, он открывает мой файл, делает свои дела, сохраняет, закрывает.

Код
Call Run_macros

'запуск макроса'
Sub Run_macros()
   'запускаем Excel-процесс
   set objExcel = CreateObject ("Excel.Application")
   objExcel.Visible = true    
   Op_writ="Путь к файлу и имя файла"
   objExcel.Workbooks.Open (Op_writ)
   'запуск макроса
   objExcel.run "UpdateAll" 
   'по завершению закрываем документ. Пишем только имя файла, без пути
   objExcel.Workbooks("^_^.xlsm").Save
    objExcel.Workbooks("^_^.xlsm").Close(false)
   'закрываем Excel-процесс
    objExcel.Quit
end sub

Но надо понимать, что в Вашем случае значит «обновить файл». У меня за это отвечает макрос, который находится в файле. Я его и запускаю objExcel.run «UpdateAll».
Т.е. сложности открыть файл и закрыть по расписанию нет. Вам надо автоматизировать «обновление».

Изменено: whateverlover14.09.2022 16:09:08

 

Ga

Пользователь

Сообщений: 7
Регистрация: 25.10.2021

#8

14.09.2022 16:19:50

Цитата
написал:
Ga, у меня что-то такое наколхожено.
Сделал bat’ник с таким кодом и закинул его в планировщик. Каждый день в 5:30, он открывает мой файл, делает свои дела, сохраняет, закрывает.

Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17      Call   Run_macros       'запуск макроса'    Sub   Run_macros()         'запускаем Excel-процесс         set objExcel = CreateObject (  "Excel.Application"  )         objExcel.Visible = true             Op_writ=  "Путь к файлу и имя файла"         objExcel.Workbooks.Open (Op_writ)         'запуск макроса         objExcel.run   "UpdateAll"         'по завершению закрываем документ. Пишем только имя файла, без пути         objExcel.Workbooks(  "^_^.xlsm"  ).Save          objExcel.Workbooks(  "^_^.xlsm"  ).Close(false)         'закрываем Excel-процесс          objExcel.Quit    end sub   

 
Но надо понимать, что в Вашем случае значит «обновить файл». У меня за это отвечает макрос, который находится в файле. Я его и запускаю objExcel.run «UpdateAll».
Т.е. сложности открыть файл и закрыть по расписанию нет. Вам надо автоматизировать «обновление».

Большое спасибо, с этим уже можно что-то делать! Мне надо просто «нажать «обновить все»», думаю, что найду как.

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

#9

14.09.2022 16:57:16

Цитата
Ga написал:
Мне надо просто «нажать «обновить все»»,
Код
ActiveWorkbook.RefreshAll
 

Ga

Пользователь

Сообщений: 7
Регистрация: 25.10.2021

#10

14.09.2022 17:49:59

Цитата
написал:

Цитата
Ga написал:
Мне надо просто «нажать «обновить все»»,

 

Код
    [URL=#]?[/URL]       1      ActiveWorkbook.RefreshAll   

 

Супер! Большое спасибо!

 

Михаил Л

Пользователь

Сообщений: 2640
Регистрация: 19.02.2020

#11

14.09.2022 18:06:49

Прием

НА МЯСО В ПРОФИЛЕ

I am using all the solutions that appear in:

How to refresh ALL cell through VBA

Getting Excel to refresh data on sheet from within VBA

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True

or

Application.Calculate

or

Application.CalculateFull

None of them works in Excel 2010. When I go to the cell and right click refresh it works. How can I refresh within VBA?

Sheets("Name_of_sheet").Range("D424").Refresh raises an

exception 438

Questions:

  1. How can I make the script support Excel 2003, 2007, 2010?
  2. How can I choose the source file to refresh from using VBA?

EDIT:

  1. I want to simulate a right mouse click and choose refresh in the menu in worksheet 3. That is the entire story.

  2. I work on an Excel file created 10 years ago. When opening in Excel 2010, I can go to a cell and right click on it and choose refresh and then choose the .txt file to refresh from. I am trying to do it automatically within VBA.

Community's user avatar

asked Nov 22, 2012 at 13:39

0x90's user avatar

6

You could try using Application.Calculation

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

answered Nov 22, 2012 at 13:42

Anirudh Ramanathan's user avatar

4

For an individual cell you can use:

Range("D13").Calculate

OR

Cells(13, "D").Calculate

0x90's user avatar

0x90

38.9k36 gold badges163 silver badges244 bronze badges

answered Nov 22, 2012 at 13:46

InContext's user avatar

InContextInContext

2,46112 silver badges24 bronze badges

1

I finally used mouse events and keystrokes to do it:

Sheets("worksheet34").Select
Range("D15").Select
Application.WindowState = xlMaximized
SetCursorPos 200, 600 'set mouse position at 200, 600
Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) 'click left mouse
Application.SendKeys ("R")

answered Nov 29, 2012 at 5:52

0x90's user avatar

0x900x90

38.9k36 gold badges163 silver badges244 bronze badges

2

just a reminder;

be careful when using

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

this sets the entire excel application to calculate formula’s either automatically or manually. If you use

Application.Calculation = xlCalculationManual

you’ll notice your automatic formulas no longer work.

cheers

answered Feb 16, 2016 at 17:53

LeeF's user avatar

You can force excel to recalculate a cell or range of cells by marking the cell/range as dirty.

Example :

' Recalculate Column D4 to D24
Sheets("Name_of_sheet").Range("D4:D24").Dirty

or

' Recalculate Cell D4<br>
Sheets("Name_of_sheet").Range("D4").Dirty<br>

Ike's user avatar

Ike

7,8904 gold badges11 silver badges29 bronze badges

answered Sep 5, 2021 at 11:16

XYZLOL's user avatar

Application.Calculate didn’t work for my function. Not even when followed by DoEvents.

What I found that works is to re-enter the formula in the cell.
A simple way to get the formula is to start recording a macro, use F2 to edit the cell, then press enter. The macro will make a great copy of the function text with all needed quotes.

Below is an example.

Sheets("Name_of_sheet").Range("D424").FormulaR1C1 = "=now()"

svyat1s's user avatar

svyat1s

8689 gold badges12 silver badges21 bronze badges

answered Mar 5, 2021 at 19:36

Scott's user avatar

Cells(x, y).Select
ActiveCell.FormulaR1C1 = Selection.Value

works perfectly for me

answered Aug 2, 2022 at 20:21

user19260138's user avatar

I have a long «macro» in a workbook > 20 MB, tens of thousands of lines, that calls a dll written in Fortran. None of these methods worked:

Call Application.Calculate
Call Application.CalculateFull
Call Application.CalculateFullRebuild
Re-entering the formula
Range.Dirty

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

ThisWorkbook.ActiveSheet.EnableCalculation = False
ThisWorkbook.ActiveSheet.EnableCalculation = True

This worked:

On Error Resume Next
Application.SendKeys "{F2}{Enter}{NumLock}"  'SendKeys turns off NumLock for some reason
On Error GoTo 0

This even worked when a chart was selected.

answered Feb 9 at 14:47

Rocky Scott's user avatar

Rocky ScottRocky Scott

4364 silver badges13 bronze badges

Like this post? Please share to your friends:
  • Обновить файл excel без открытия
  • Обновить файл excel python
  • Обновить страницу excel горячая клавиша
  • Обновить программу microsoft word
  • Обновить ссылки на другие документы excel