Макрос эксель вставить в ячейку название файла
С помощью OLE можно включать контент из других программ, таких как Word или Excel.
OLE поддерживается многими различными программами, а OLE используется для того, чтобы содержимое, созданное в одной программе, было доступно в другой программе. Например, можно вставить документ Office Word в книгу Office Excel. Чтобы узнать, какие типы содержимого можно вставить, на вкладке Вставка в группе Текст нажмитекнопку Объект. В поле Тип объекта отображаются только программы, которые установлены на компьютере и поддерживают объекты OLE.
При копировании данных между Excel или любой программой, которая поддерживает OLE, например Word, вы можете скопировать их как связанный объект или внедренный объект. Основные различия между связанными и внедренными объектами заключается в том, где хранятся данные и как обновляется объект после его конечный файл. Внедренные объекты хранятся в книге, в которую они вставляются, и не обновляются. Связанные объекты остаются отдельными файлами, и их можно обновлять.
Связанные и внедренные объекты в документе
1. Внедренный объект не имеет подключения к исходным файлам.
2. Связанный объект связан с исходным файлом.
3. Исходный файл обновляет связанный объект.
Когда использовать связанные объекты
Если вы хотите, чтобы данные в конечный файл обновлялись при исходный файл изменения, используйте связанные объекты.
При связываемом объекте исходные данные сохраняются в исходном файле. В конечном файле отображается представление связанных данных, но хранится только расположение исходных данных (и размер, если объект является объектом диаграммы Excel). Исходный файл должен оставаться доступным на компьютере или в сети, чтобы сохранить связь с исходными данными.
Связанные данные могут обновляться автоматически при изменении исходных данных в исходном файле. Например, если вы вы выбрали абзац в документе Word, а затем вклеили его как связанный объект в книгу Excel, то при изменении сведений в документе Word сведения могут обновляться в Excel.
Когда использовать внедренные объекты
Если вы не хотите обновлять скопированные данные при их внесении в исходный файл, используйте внедренный объект. Версия источника полностью внедрена в книгу. При копировании данных как внедренных объектов в файле назначения требуется больше места на диске, чем при связываи.
Когда пользователь открывает файл на другом компьютере, он может просмотреть внедренный объект, не имея доступа к исходным данным. Поскольку внедренный объект не имеет ссылок на исходный файл, он не обновляется при изменении исходных данных. Чтобы изменить внедренный объект, дважды щелкните его, чтобы открыть и изменить в программе-источнике. На компьютере должна быть установлена программа-источник (или другая программа, которая может редактировать объект).
Изменение способа отображения объекта OLE
Вы можете отобразить связанный объект или внедренный объект в книге точно так же, как в программа-источник или в качестве значка. Если книга будет просмотрена в Интернете и вы не собираетесь ее печатать, вы можете отобразить объект в виде значка. Таким образом уменьшается объем отображаемого пространства, занимаемого объектом. Пользователи, которые хотят отобразить сведения, могут дважды щелкнуть значок.
Иногда бывает необходимо заполучить на лист Excel список файлов в заданной папке и ее подпапках. В моей практике такое встречалось неоднократно, например:
- перечислить в приложении к договору на проведение тренинга список файлов из раздаточных материалов для особо щепетильных юристов в некоторых компаниях
- создать список файлов для ТЗ проекта
- сравнить содержимое папок (оригинал и бэкап, например)
Для реализации подобной задачи можно использовать несколько способов.
Способ 1. Скелет из шкафа - функция ФАЙЛЫ
Этот способ использует древнюю функцию ФАЙЛЫ (FILES) , оставшуюся в Microsoft Excel с далеких девяностых. Вы не найдете эту функцию в общем списке функций, но для совместимости, она всё ещё остаётся внутри движка Excel, и мы вполне можем её использовать.
1. В любую ячейку листа (например, в А1) введём путь к папке, список файлов из которой мы хотим получить.
Обратите внимание, что путь должен оканчиваться шаблоном со звездочками:
- *.* - любые файлы
- *.xlsx - книги Excel (только с расширением xlsx)
- *.xl* - любые файлы Excel
- *отчет* - файлы, содержащие слово отчет в названии
2. Создадим именованный диапазон с помощью вкладки Формулы - далее кнопка Диспетчер имен - Создать (Formulas - Names Manger - Create) . В открывшемся окне введем любое имя без пробелов (например Мои_файлы) и в поле диапазона выражение:
После нажатия на ОК будет создан именованный диапазон с именем Мои_файлы, где хранится список всех файлов из указанной в А1 папки. Останется их оттуда только извлечь.
3. Чтобы извлечь имена отдельных файлов из созданной переменной, используем функцию ИНДЕКС (INDEX) , которая в Excel вытаскивает данные из массива по их номеру:
Если лениво делать отдельный столбец с нумерацией, то можно воспользоваться костылем в виде функции СТРОКИ (ROWS) , которая будет подсчитывать количество заполненных строк с начала списка автоматически:
=ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3) )
= ЕСЛИОШИБКА( ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3)) ; "")
Важное примечание : формально функция ФАЙЛЫ относится к макро-функциям, поэтому необходимо будет сохранить ваш файл в формате с поддержкой макросов (xlsm или xlsb).
Способ 2. Готовый макрос для ленивых
Если вы знакомы с макросами (не в смысле их программирования, а в смысле копипастинга готовых кодов на VBA), то вам, возможно, отлично зайдёт небольшой макрос, добавляющий в текущую книгу новый пустой лист и выводящий на него список всех файлов с их параметрами из заданной пользователем папки.
Для добавления макроса в вашу книгу нажмите сочетание клавиш Alt + F11 , или кнопку Visual Basic на вкладке Разработчик (Developer) , в открывшемся окне редактора Visual Basic вставьте новый модуль через меню Insert - Module и скопируйте туда текст этого макроса:
Для запуска макроса нажмите сочетание клавиш Alt + F8 ,или кнопку Макросы (Macros) на вкладке Разработчик (Developer) , выберите наш макрос FileList и нажмите кнопку Выполнить (Run) . В диалоговом окне выберите любую папку или диск и - вуаля!
Если захотите, чтобы вместо пути к файлу в столбце B выводилась живая гиперссылка, то замените 52-ю строку
Cells(r, 2).Formula = FileItem.Path
Cells(r, 2).Formula = "=HYPERLINK(""" & FileItem.Path & """)"
Способ 3. Мощь и красота - надстройка Power Query
Power Query - это очень мощная и при этом бесплатная надстройка для Excel от Microsoft, упрощающая множество задач по загрузке и трансформации данных. В нашей ситуации она тоже может здорово помочь.
Если у вас Excel 2016 или новее, то Power Query уже встроена в Excel по умолчанию, поэтому просто на вкладке Данные выберите команду Создать запрос / Получить данные - Из файла - Из папки (Create Query / Get Data - From file - From folder) . Если у вас Excel 2010-2013, то Power Query нужно будет скачать с сайта Microsoft и установить как отдельную надстройку и она появится у вас в Excel в виде отдельной вкладки Power Query. На ней будет аналогичная кнопка Из файла - Из папки (From file - From folder) .
В открывшемся окне нужно будет указать папку, содержимое которой мы хотим получить. После нажатия на ОК Power Query обшарит указанную папку и все вложенные подпапки и выдаст на экран окно с предварительным просмотром результатов:
Если внешний вид списка вас устраивает, то можно смело жать внизу кнопку Загрузить (Load) , чтобы залить эти данные на новый лист. Если же хочется дополнительно обработать список (удалить лишние столбцы, отобрать только нужные файлы и т.п.), то нужно выбрать команду Изменить / Преобразовать данные (Edit / Transform Data).
Поверх окна Excel откроется окно редактора Power Query, где мы увидим список всех наших файлов в виде таблицы:
Дальше возможны несколько вариантов:
-
Если нужны только файлы определенного типа, то их можно легко отобрать с помощью фильтра по столбцу Extension:
После того, как необходимые файлы отобраны, можно смело удалить ненужные столбцы, щелкнув по заголовку столбца правой кнопкой мыши и выбрав команду Удалить (Remove column ) . Это, кстати, уже никак не повлияет на фильтрацию или сортировку нашего списка:
Если в будущем планируется подсчитывать количество файлов в каждой папке (например, для контроля поступивших заявок или подсчета статистики по заявкам), то имеет смысл дополнительно сделать ещё пару действий:
- Щелкните правой кнопкой мыши по столбцу Folder Path и выберите команду Дублировать столбец (Duplicate Column) .
- Выделите скопированный столбец и на вкладке Преобразование (Transform) выберите Разделить столбец - По разделителю (Split Column - By delimiter)
Мы получим рядом с нашими данными еще несколько столбцов, где будут продублированы имена вложенных папок - это пригодится нам чуть позже для подсчета статистики с помощью сводной таблицы:
Получившиеся столбцы можно переименовать (Диск, Папка1, Папка2 и т.д.), просто щёлкнув дважды по заголовку каждого.
И, наконец, когда список готов, то его можно выгрузить на лист с помощью команды Главная - Закрыть и загрузить - Закрыть и загрузить в. (Home - Close & Load - Close & Load to. ) :
И, само-собой, теперь можно построить по нашей таблице сводную (вкладка Вставка - Сводная таблица), чтобы легко подсчитать количество файлов в каждой папке:
Дополнительным бонусом можно сделать еще один столбец с функцией ГИПЕРССЫЛКА (HYPERLINK) , которая создаст красивые стрелочки-ссылки для моментального перехода к каждому файлу:
Мелочь, а приятно :)
И вдвойне приятно, что в будущем, при изменении содержимого исходной папки, достаточно будет просто щелкнуть мышью по нашей таблице и выбрать команду Обновить (Refresh) - и Power Query выполнит всю цепочку запрограммированных нами единожды действий уже автоматически, отобразив все изменения в составе папки.
в определенной папке есть файл у которого постоянно обновляется имя "файл_1" .. новая версия "файл_2" .. еще более новая "файл_3" и т.д. есть другой файл, который вытягивает из него определенную инфу.
данные, которые вытягиваются во второй файл вытягиваются посредством банального ВПР(), ГПР() и ПОИСКПОЗ() - в данной ситуации это наиболее удобно.
так вот, в эти функции ищут диапазоны из которых надо вытягивать данные через ДВССЫЛ в которой прописывается имя файла.
вопрос - как через макрос можно обновлять это имя??
т.е. надо чтобы при открытии, к примеру, ексель шел в определенную папку находил файл со словами в имени "файл", копировал имя файла полностью и вставлял в определенную ячейку в книге, после чего открывал эту книгу.
Sub Workbook_Open()
Dim i As Long, z As Long, ws As Worksheet, y As Variant
Dim fLdr As String
y = ".xls"
z = 1
fLdr = "C:\Мои документы"
Columns("A:A").Select
Selection.ClearContents
Range("A1").Select
With Application.FileSearch
.NewSearch
.LookIn = fLdr
.SearchSubFolders = True
.Filename = y
If .Execute() > 0 Then
For i = 1 To .FoundFiles.Count
If Left$(.FoundFiles(i), 1) = Left$(fLdr, 1) Then
z = z + 1
Лист1.Cells(z + 1, 1).Resize(, 1) = Array(Dir(.FoundFiles(i)))
End If
Next i
End If
End With
Columns("A:A").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Workbooks.Open Filename:="C:\Мои документы\" & Range("A1")
End Sub
ЗЫ: Вместо C:\Мои документы укажите путь к папке, где лежат "файл_1" .. новая версия "файл_2". Макрос ищет все файлы с расширением .xls в указанной папке и записывает их в столбец А на Лист1, сортирует и в ячейке А1 получаем "старший" файл, который открывается.
Маленький нюанс: количество цифр в имени файла д.б. одинаковым для правильной сортировки. Т.е., если файлов больше 9 но меньше 100 имена должны начинаться с "файл_01".
Эта статья была написана Raddini Rahayu, Microsoft MVP.
Вот еженедельные отчеты о действиях продаж. Например, в этом случае имеется 15 человек. Нэнси, отчеты администратора, ей назначено суммировать все данные о продажах в один файл, где все продажи разделены на каждом листе. Чтобы легко организовать данные, каждый лист, который она дала, совпадает с именем продаж на этом листе. Сначала Нэнси чувствует себя комфортно с этим, но так как больше данных и требует быстрой обработки, она была настолько перегружена. Чтобы преодолеть это, Нэнси хочет, чтобы листы имен автоматически менялись в соответствии с именем продаж на каждом листе, не переименовывать его вручную.
Решения
Наилучшие решения для решения проблемы Нэнси — это использование макроса. Этот макрос предназначен для каждого листа в этом файле независимо от количества листов. Имя каждого листа будет изменяться в соответствии с именем продаж, которое было определено в одном расположении на каждом листе.
Выполнение
Первый шаг
Разработка форматов отчетов и указание расположения ячейки, где будет размещено имя продаж. В этом случае расположение находится на ячейке J2. Этот формат отчета должен быть одинаковым на каждом листе.
Храните имена листов в имени по умолчанию (Sheet1, Sheet2, Sheet3 и т.д.).
Последний шаг
Шаг кодирования макроса
После того как мы знаем расположение ячейки, где будет размещено имя продаж, теперь мы можем продолжить следующий шаг — кодирование Макроса.
На вкладке Разработчик выберите Visual Basic в категории Code или нажмите клавишу Alt+F11 на клавиатуре, Visual Basic отображается окно.
На области задач проекта нажмите кнопку Sales Report.xlsx (Имя книги), затем в меню Вставить выберите модуль и напишите следующий сценарий:
Нажмите клавишу F5key на клавиатуре, если отлаговка не закрывается Visual Basic окна и возвращается в Excel. Если отладка отладка, проверьте сценарий.
Вернись Excel и узнайте, что происходит, если коды верны, теперь имя каждого листа переименовано в соответствии с существующим именем продаж на каждом листе. Вот и все. Надеюсь, с пользой.
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.
Читайте также: