Как открыть несколько файлов vba excel
Иногда необходимо проделать однотипные операции с несколькими файлами, расположенными в одной папке. Можно открывать каждый по очереди:
Workbooks.Open "C:\Новая папка\Книга1.xlsx"
Workbooks.Open "C:\Новая папка\Книга2.xlsx"
и т.д.
Но если файлов много и все с разными именами, то это не очень практично и уж точно не компактно. А т.к. немногие начинающие могут сразу найти желаемое, я решил выложить код, который перебирает все файлы в папке и открывает их:
Sub Get_All_File_from_Folder() Dim sFolder As String, sFiles As String Dim wb As Workbook 'диалог запроса выбора папки с файлами With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) 'отключаем обновление экрана, чтобы наши действия не мелькали Application.ScreenUpdating = False sFiles = Dir(sFolder & "*.xls*") Do While sFiles <> "" 'открываем книгу Set wb = Application.Workbooks.Open(sFolder & sFiles) 'действия с файлом 'Запишем на первый лист книги в ячейку А1 - www.excel-vba.ru wb.Sheets(1).Range("A1").Value = "www.excel-vba.ru" 'Закрываем книгу с сохранением изменений wb.Close True 'если поставить False - книга будет закрыта без сохранения sFiles = Dir Loop 'возвращаем ранее отключенное обновление экрана Application.ScreenUpdating = True End Sub
sFiles = Dir(sFolder & "*.xls*") - Строка отвечает за тип перебираемых файлов. В примере будут просмотрены любые файлы Excel. Звездочка на конце означает любой символ или набор символов. Т.е. если указать без неё - "*.xls", то будут просмотрены только файлы с расширением xls, а если указать xlsx - то файлы с расширением xlsx и никакие другие.
Если хотите перебрать файлы других форматов, а не Excel, то просто замените "*.xls" на нужное расширение. Например "*.doc". Также, если хотите собрать только файлы с определенными символами/словами в имени, то можно указать так: sFiles = Dir(sFolder & "*отчет*.xls*") . Будут просмотрены все файлы, содержащие в имени слово "отчет"(например "отчет за июнь.xls", "отчет за июль.xls", "сводный отчет.xls" и т.п.).
Но есть и еще одна проблема: что если необходимо открыть файлы не только в указанной папке, но и во всех её подпапках? Указанные выше код не подойдет в данной ситуации. В версиях Excel 2003 и младше это решалось с помощью метода .FileSearch, но в старших версиях данный метод по каким-то причинам был заблокирован разработчиками Microsoft. И осталось действовать только через рекурсивный метод перебора папок. Ниже приведен код, который открывает все файлы Excel в указанной папке, включая все подпапки:
Option Explicit Dim objFSO As Object, objFolder As Object, objFile As Object Sub Get_All_File_from_SubFolders() Dim sFolder As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) Application.ScreenUpdating = False Set objFSO = CreateObject("Scripting.FileSystemObject") GetSubFolders sFolder Set objFolder = Nothing Set objFSO = Nothing Application.ScreenUpdating = True End Sub Private Sub GetSubFolders(sPath) Dim sPathSeparator As String, sObjName As String Dim wb As Workbook Set objFolder = objFSO.GetFolder(sPath) For Each objFile In objFolder.Files If Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Like ".xls*" Then 'открываем книгу Set wb = Application.Workbooks.Open(sPath & objFile.Name) 'действия с файлом 'Запишем на первый лист книги в ячейку А1 - www.excel-vba.ru wb.Sheets(1).Range("A1").Value = "www.excel-vba.ru" wb.Close True End If Next For Each objFolder In objFolder.SubFolders GetSubFolders objFolder.Path & Application.PathSeparator Next End Sub
If Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Like ".xls*" Then
Строка отвечает за тип перебираемых файлов. В примере будут просмотрены любые файлы Excel. Звездочка на конце означает любой символ или набор символов. Т.е. если указать без неё - "*.xls", то будут просмотрены только файлы с расширением xls, а если указать xlsx - то файлы с расширением xlsx и никакие другие.
Если добавить условие: If objFSO.GetBaseName(objFile) Like "*книга*" Then
то будут обработаны файлы, которые в имени содержать слово "книга". При этом регистр букв имеет значение. Т.е. если файл содержит в имени слово "Книга", то он не будет обработан.
Думаю теперь Вы легко сможете проделать необходимые операции с множеством файлов.
В примере я закомментировал строки, открывающие файл и вносящие изменения в ячейку А1 и заменил это созданием массива имен всех файлов в папках и подпапках. По окончании имена всех файлов заносятся в столбец "А". Сделано для того, чтобы Вы случайно не повредили информацию в файлах.
В последнее время участились вопросы как просмотреть еще и все диски. Поэтому решил выложить код, который просматривает все подключенные диски и выводит список всех файлов в них. Для работы кода достаточно разместить его в одном модуле с кодом выше:
Sub Get_All_drives() Dim objDrives As Object, objDrive As Object Set objFSO = CreateObject("Scripting.FileSystemObject") Set objDrives = objFSO.Drives For Each objDrive In objDrives If objDrive.IsReady Then GetSubFolders objDrive.DriveLetter & ":\" End If Next objDrive End Sub
Приходилось ли вам когда-нибудь по несколько минут ждать пока в вашей книге Excel отработает макрос, обновится запрос Power Query или пересчитаются тяжелые формулы? Можно, конечно, заполнить случившуюся паузу чайком-кофейком на вполне законных основаниях, но наверняка вам приходила в голову и другая мысль: а не открыть ли рядом другую книгу Excel и не не поработать ли пока с ней?
Но всё не так просто.
Если вы открываете несколько файлов Excel обычным образом (двойным щелчком мыши в Проводнике или через меню Файл - Открыть в Excel), то они автоматически открываются в одном и том же экземпляре программы Microsoft Excel. Соответственно, если запустить пересчёт или макрос в одном из таких файлов, то занято будет всё приложение и зависнут все открытые книги, т.к. системный процесс Excel у них общий.
Решается эта проблема достаточно просто - нужно запустить Excel в новом отдельном процессе. Он будет независим от первого и позволит вам спокойно работать с другими файлами, пока предыдущий экземпляр Excel параллельно трудится над тяжелой задачей. Сделать это можно несколькими способами, причем некоторые из них могут работать или не работать в зависимости от вашей версии Excel и установленных обновлений. Так что пробуйте всё по очереди.
Способ 1. Лобовой
Самый простой и очевидный вариант - выбрать в главном меню Пуск - Программы - Excel (Start - Programs - Excel) . К сожалению, работает такой примитивный подход только в старых версиях Excel.
Способ 2. Средняя кнопка мыши или Alt
- Щёлкните правой кнопкой мыши по иконке Excel на панели задач - откроется контекстное меню со списком последних файлов.
- В нижней части этого меню будет строка Excel - щёлкните по ней левой кнопкой мыши, удерживая при этом клавишу Alt .
Должен запуститься ещё один Excel в новом процессе. Также вместо щелчка левой кнопкой с Alt можно использовать среднюю кнопку мыши - если на вашей мышке она есть (или нажимное колесико выполняет её роль).
Способ 3. Командная строка
Выберите в главном меню Пуск - Выполнить (Start - Run) или нажмите сочетание клавиш Win + R . В появившемся поле введите команду:
После нажатия на ОК должен запуститься новый экземпляр Excel в отдельном процессе.
Способ 4. Макрос
Это вариант чуть сложнее, чем предыдущие, но работает в любой версии Excel по моим наблюдениям:
- Открываем редактор Visual Basic через вкладку Разработчик - Visual Basic (Developer - Visual Basic) или сочетанием клавиш Alt + F11 . Если вкладки Разработчик не видно, то отобразить её можно через Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) .
- В окне Visual Basic вставляем новый пустой модуль для кода через меню Insert - Module.
- Копируем туда следующий код:
Если запустить теперь созданный макрос через Разработчик - Макросы (Developer - Macro) или сочетанием клавиш Alt + F8 , то будет создан отдельный экземпляр Excel, как мы и хотели.
Для удобства, приведенный выше код можно добавить не в текущую книгу, а в Личную Книгу Макросов и вынести для этой процедуры отдельную кнопку на панель быстрого доступа - тогда эта возможность будет у вас всегда под рукой.
Способ 5. Файл сценария VBScript
Этот способ похож на предыдущий, но использует VBScript - сильно упрощенный вариант языка Visual Basic для выполнения простых действий прямо в Windows. Чтобы его использовать делаем следующее:
Сначала включаем отображение расширений для файлов в Проводнике через Вид - Расширения файлов (View - File Extensions) :
Затем создаем в любой папке или на рабочем столе текстовый файл (например NewExcel.txt) и копируем туда следующий код на VBScript:
Сохраняем и закрываем файл, а затем меняем его расширение с txt на vbs. После переименования появится предупреждение, с которым надо согласиться, и у файла изменится иконка:
Всё. Теперь двойной щелчок левой кнопкой мыши по этому файлу будет запускать новый независимый экземпляр Excel, когда он вам потребуется.
Помните о том, что кроме плюсов, запуск нескольких экземпляров Excel имеет и минусы, т.к. эти системные процессы друг друга "не видят". Например, вы не сможете сделать прямую ссылку между ячейками книг в разных Excel. Также будут сильно ограничены возможности копирования между различными экземплярами программы и т.д. В большинстве случаев, однако, это не такая уж большая плата за возможность не терять время в ожидании.
Здравствуйте, подскажите как правильно написать строку Application.Workbooks.Open ("c:\Âõîäÿùèå\3.xls"), что бы в имени файла была переменная. В моем случае s
Суть в том что бы открыть все файлы из каталога по очереди.
Открытие по очереди всех текстовых файлов из каталога
Доброго времени суток! Надо сделать перебор всех текстовых файлов в указанной папке. Я сделал так.
Открытие по очереди всех текстовых файлов из каталога
Доброго времени суток! Надо сделать перебор всех текстовых файлов в указанной папке. Я сделал так.
Открытие всех файлов из каталога
private void открытьФайлыToolStripMenuItem_Click(object sender, EventArgs e) < .
Открытие из заданного каталога всех файлов с заданым расширением (xls)
Никак не могу найти решение своей задачи, если у кого-нибудь есть желание и возможность, то.
Спасибо!
Но имена файлов будут не числовые, точнее могут быть какие угодно (там ФИО будет писаться). поэтому и выбрал свой способ.
Добавлено через 8 минут
Спасибо! Всё работает!
. я просто совсем новичок, точнее кроме школьного курса программирования ничего не было, а теперь прижало, надо сделать для уменьшения своих трудозатрат!
Спасибо что помогаете таким как мы
Добавлено через 46 минут
А ещё маленький вопросик:
как написать
Добавлено через 4 минуты
Кстати, вот что: Dir отслеживает только первые 3 символа расширения. То есть по маске *.xls будут найдены файлы *.xlsx, *.xlsm. Иногда это полезно, иногда нет.
Нужно отрыть файлы содержащие в названии символ №
Запись s = Dir(fldr & "*№*.xls") не сработала.
Добавлено через 23 минуты
Использовал другой код.
Там работает и выбор каталога есть.
Вывести имена всех файлов во всех подкаталогах данного каталога
Задание: собрать в один файл имена всех файлов во всех подкаталогах данного каталога
Открытие файлов из каталога и сохранение их в каталог определенного размера
Есть сама программа обработки ОДИНОЧНОГО файла, выполненная на куде. Хотелось бы поставить на.
Копирование всех файлов из каталога
Добрый вечер. Нужно скопировать все файлы из текущего каталога в определенную папку. Попробовал.
Запуск всех файлов из каталога
Доброго времени суток. Я решил написать программку для запуска всех файлов находящихся в указанном.
Приходилось ли вам когда-нибудь по несколько минут ждать пока в вашей книге Excel отработает макрос, обновится запрос Power Query или пересчитаются тяжелые формулы? Можно, конечно, заполнить случившуюся паузу чайком-кофейком на вполне законных основаниях, но наверняка вам приходила в голову и другая мысль: а не открыть ли рядом другую книгу Excel и не не поработать ли пока с ней?
Но всё не так просто.
Если вы открываете несколько файлов Excel обычным образом (двойным щелчком мыши в Проводнике или через меню Файл - Открыть в Excel), то они автоматически открываются в одном и том же экземпляре программы Microsoft Excel. Соответственно, если запустить пересчёт или макрос в одном из таких файлов, то занято будет всё приложение и зависнут все открытые книги, т.к. системный процесс Excel у них общий.
Решается эта проблема достаточно просто - нужно запустить Excel в новом отдельном процессе. Он будет независим от первого и позволит вам спокойно работать с другими файлами, пока предыдущий экземпляр Excel параллельно трудится над тяжелой задачей. Сделать это можно несколькими способами, причем некоторые из них могут работать или не работать в зависимости от вашей версии Excel и установленных обновлений. Так что пробуйте всё по очереди.
Способ 1. Лобовой
Самый простой и очевидный вариант - выбрать в главном меню Пуск - Программы - Excel (Start - Programs - Excel) . К сожалению, работает такой примитивный подход только в старых версиях Excel.
Способ 2. Средняя кнопка мыши или Alt
- Щёлкните правой кнопкой мыши по иконке Excel на панели задач - откроется контекстное меню со списком последних файлов.
- В нижней части этого меню будет строка Excel - щёлкните по ней левой кнопкой мыши, удерживая при этом клавишу Alt .
Должен запуститься ещё один Excel в новом процессе. Также вместо щелчка левой кнопкой с Alt можно использовать среднюю кнопку мыши - если на вашей мышке она есть (или нажимное колесико выполняет её роль).
Способ 3. Командная строка
Выберите в главном меню Пуск - Выполнить (Start - Run) или нажмите сочетание клавиш Win + R . В появившемся поле введите команду:
После нажатия на ОК должен запуститься новый экземпляр Excel в отдельном процессе.
Способ 4. Макрос
Это вариант чуть сложнее, чем предыдущие, но работает в любой версии Excel по моим наблюдениям:
- Открываем редактор Visual Basic через вкладку Разработчик - Visual Basic (Developer - Visual Basic) или сочетанием клавиш Alt + F11 . Если вкладки Разработчик не видно, то отобразить её можно через Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) .
- В окне Visual Basic вставляем новый пустой модуль для кода через меню Insert - Module.
- Копируем туда следующий код:
Если запустить теперь созданный макрос через Разработчик - Макросы (Developer - Macro) или сочетанием клавиш Alt + F8 , то будет создан отдельный экземпляр Excel, как мы и хотели.
Для удобства, приведенный выше код можно добавить не в текущую книгу, а в Личную Книгу Макросов и вынести для этой процедуры отдельную кнопку на панель быстрого доступа - тогда эта возможность будет у вас всегда под рукой.
Способ 5. Файл сценария VBScript
Этот способ похож на предыдущий, но использует VBScript - сильно упрощенный вариант языка Visual Basic для выполнения простых действий прямо в Windows. Чтобы его использовать делаем следующее:
Сначала включаем отображение расширений для файлов в Проводнике через Вид - Расширения файлов (View - File Extensions) :
Затем создаем в любой папке или на рабочем столе текстовый файл (например NewExcel.txt) и копируем туда следующий код на VBScript:
Сохраняем и закрываем файл, а затем меняем его расширение с txt на vbs. После переименования появится предупреждение, с которым надо согласиться, и у файла изменится иконка:
Всё. Теперь двойной щелчок левой кнопкой мыши по этому файлу будет запускать новый независимый экземпляр Excel, когда он вам потребуется.
Помните о том, что кроме плюсов, запуск нескольких экземпляров Excel имеет и минусы, т.к. эти системные процессы друг друга "не видят". Например, вы не сможете сделать прямую ссылку между ячейками книг в разных Excel. Также будут сильно ограничены возможности копирования между различными экземплярами программы и т.д. В большинстве случаев, однако, это не такая уж большая плата за возможность не терять время в ожидании.
Открыть несколько файлов *.html
Здравствуйте, имеется несколько файлов *.html, как их открыть программно, чтобы они отображались в.
Открыть несколько файлов *.xls и вернуться в первоначальную книгу
Проблема в следующем. В книге 1 - модуль с процедурами для обработки файлов. Как с этой книги.
Макрос:Выбрать несколько текстовых файлов и открыть их все
Дали задание на практике, сделать макрос(генератор текста). С VBА первый раз работаю, плохо.
Формирование pdf файлов циклом из таблицы
Доброго времени суток. на данный момент макрос формирует из заданной строки файл pdf,сохраняет его.
Добавлено через 4 минуты
Set Doc = App.Documents.Open(p + f)
'Здесь можно работать с открытым документом
Doc.Close -1 'wdSaveChanges
Не в одном, а во всех документах из папки есть закладка с указанным именем, тогда всё прокатит. If Len(p) Then а здесь реально засада, должно быть f
P.S. Если уверенности в наличии закладки нет, то :
Что за [censored] ? Если этот перл имеет отношение к прошлой теме, то так и пишите
да к стати забыл спросить а если в документах есть просто текст (21.05.2020) а не "метка" как текст заменить?
попробовал записать рекордером не получилось
Если текст не являются частью колонтитула и т.п., то замена происходит
Хотя можно и короче
- я без проверки набирал:
Открыть несколько файлов
Есть массив путей нескольких файлов.Мне нужно открыть их и вернуть массив строк с содержимым.
Открыть несколько текстовых файлов
вот к примеру к прописать такой код list.LoadFromFile('C:////*.txt'); Он находит строку которая.
Открыть сразу несколько файлов.
подскажите! вот есть код: var openDialog : TOpenDialog; // Open dialog variable i .
Открыть несколько разных файлов
Добрый вечер. Не могу разобраться с проблемой. Нужно открыть несколько файлов text, где i цифра от.
Открыть несколько файлов в программе
Вопрос такой. В контекстное меню Windows добавлен пункт "Открыть с помощью. ". Через него.
Как открыть несколько файлов в OpenFileDialog
Помогите пожалуйста открыть несколько файлов с помощью openFileDialog. Пишут, что надо поменять.
Читайте также: