Внесение изменений в группу рабочих тетрадей

Со временем очень легко создать и собрать огромное количество книг Excel. Предположим, у вас есть целая куча книг, в которых вам нужно сделать то же изменение. Например, вам может потребоваться изменить значение, хранящееся в ячейке A10 каждого листа в каждой книге.

Если вам нужно было изменить только несколько книг, задача довольно проста: Загрузите каждую книгу и, в свою очередь, внесите изменения в каждую из них. Если у вас есть пара сотен книг, в которых необходимо внести изменения, задача становится более сложной.

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

c: myfiles first workbook.xlsc: myfiles second workbook.xlsc: myfiles third workbook. xls

В файле может быть столько строк, сколько необходимо; это не имеет значения. Важно, чтобы в каждой строке был допустимый путь и имя файла, а в файле не было пустых строк.

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

dir/b> myfilelist.txt

Каждый файл в каталоге заканчивается в myfilelist .txt файл. Вам нужно будет загрузить текстовый файл в текстовый редактор и проверить его, чтобы вы могли удалить посторонние записи. (Например, myfilelist.txt окажется в листинге.) Вам также необходимо будет добавить имя пути в начало каждой строки в файле.

После завершения файла вы может запустить Excel и использовать макрос для чтения текстового файла, загрузки каждой книги, указанной в текстовом файле, перехода по каждому листу в этой книге, внесения соответствующих изменений и сохранения книги. Следующий макрос отлично справится с этими задачами.

Sub ChangeFiles1 () Dim sFilename As String Dim wks As Worksheet Open «c: myfiles myfilelist.txt» Для ввода как # 1 Выполнить, пока не EOF (1) Ввод №1, sFilename ‘Получить путь и имя книги Workbooks.Open sFilename With ActiveWorkbook For Each wks In .Worksheets’ Укажите изменение, которое нужно сделать wks.Range («A1»). Value = «A1 Changed» Next End With ActiveWorkbook.Close SaveChanges: = True Loop Close # 1End Sub

Хотя этот подход отлично работает, если вам нужно обработать только один пакет файлов книги, его можно сделать гораздо более гибким, если вы ожидаете, что потребуется сделать такие изменения в будущем. Самая большая проблема, конечно же, заключается в создании файла myfilelist.txt каждый раз, когда вы хотите обработать пакет файлов. Гибкость добавляется, если макрос может просто использовать каталог, а затем загружать каждую книгу из этого каталога..

Sub ChangeFiles2 () Dim MyPath As String Dim MyFile As String Dim dirName As String Dim wks As Worksheet ‘Измените путь к каталогу по желанию dirName = «c: myfiles » MyPath = dirName & «* .xls «MyFile = Dir (MyPath) If MyFile>» «Then MyFile = dirName & MyFile Do While MyFile » «Если Len (MyFile) = 0, то выходить из рабочих книг. Открывать MyFile с помощью ActiveWorkbook для каждой недели в .Worksheets ‘ Укажите изменение, чтобы сделать wks.Range («A1»). Value = «A1 Changed» Следующий конец с помощью ActiveWorkbook.Close SaveChanges: = True MyFile = Dir If MyFile> «» Then MyFile = dirName & MyFile LoopEnd Sub

Этот макрос использует каталог, указанный вами для переменной dirName. Любой файл книги (с расширением .Xls) загружается и обрабатывается.

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

Public Sub ChangeFiles3 () Dim MyPath As String Dim MyFile As String Dim dirName As String With Application .FileDialog (msoFileDialogFolderPicker) ‘Необязательно: установите папку для начала в .InitialFileName = «C: Excel » .Title = «Выберите папку для обработки» Если .Show = True Then dirName = .SelectedItems (1) End If End With MyPath = dirName & » *. Xls» myFile = Dir (MyPath) Если MyFile> «» Then MyFile = dirName & MyFile Do While MyFile «» Если Len (MyFile) = 0, то выйти из Do Workbooks.Открыть MyFile с помощью ActiveWorkbook Для каждой недели в .Worksheets ‘Укажите изменение, которое нужно сделать wks.Range («A1»). Value = «A1 Changed» Следующий конец с ActiveWorkbook.Close SaveChanges: = True MyFile = Dir If MyFile> «» Then MyFile = dirName & MyFile LoopEnd Sub

Источник: frestage.ru

Бытовой вопрос