Страницы: 1
RSS
Массовая замена значений для книг Excel
 
Добрый день, коллеги !

Есть вопрос. Моих знаний программирования на VBA недостаточно и поэтому прошу помощи у более опытных пользователей.

Ситуация такая:
Есть  много (около 600) книг эксель. Все они однотипны и рассортированы по подпапкам. Во всех из них нужно в определенную ячейку вставлять определенное значение. Как пример, на лист с названием "2" в ячейку D23 нужно вставить значение:

Информационное письмо № 04-02/02-09
Information letter № 04-02/02-09

Для других книг из другой папки нужно будет вставлять уже другое значение в эту ячейку.

Из базы Access все данные подтягиваются автоматически, но в эту ячеку D23 данные не подтягиваются, потому что номер письма мы узнаем намного позднее и приходится вручную во все книги во всех папках его проставлять.

Для знающего человека это пустяковое дело. Буду признателен, если кто-то напишет код.

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

Буду очень благодарен если поможете.
 
Цитата
Сергей Бровков написал:
Буду признателен, если кто-то напишет код.
Все написано до нас
ПРОСМОТРЕТЬ ВСЕ ФАЙЛЫ В ПАПКЕ, ВКЛЮЧАЯ ПОДПАПКИ
Согласие есть продукт при полном непротивлении сторон
 
В Вашем сообщении и в Ваших файлах нет ничего конкретного. Что куда вставлять? Как папки называются?
Все какое - то
Цитата
Сергей Бровков написал:
Во всех из них нужно в определенную ячейку вставлять определенное значение ...Для других книг из другой папки нужно будет вставлять уже другое значение в эту ячейку...в дальнейшем и в другие ячейки на других листах вставлять требуемые значения.
Поэтому, вот код, а все эти неопределенные 'определенные' значения, 'другие' ячейки и 'другие' папки расставьте сами
Скрытый текст

П.С. Исходный код взят по ссылке выше
Согласие есть продукт при полном непротивлении сторон
 
Здравствуйте, Sanja,
Цитата
написал:
Все написано до нас ПРОСМОТРЕТЬ ВСЕ ФАЙЛЫ В ПАПКЕ, ВКЛЮЧАЯ ПОДПАПКИ
Большое спасибо. Я умею пользоваться поиском и Гуглом, но эту информацию не нашел. Очень признателен.

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

По той ссылке куда вы меня отправили мне пригодился первый код. Я изменил строку №18 в коде на:

wb.Sheets(4).Range("D23").Value = "Информационное письмо № 04-02/02-09" & vbCrLf & "Information letter № 04-02/02-09"

Все сработало хорошо, правда эксель зависал в процессе.

Единственное что:

1) в шаблоне есть 2 скрытых листа и как оказалось нужный мне лист это wb.Sheets(4), а не лист с названием "2". Как изменить порядковый номер листа, на название листа ?

2) Макрос в процессе прервался и изменил только половину файлов. Пришлось запускать макрос повторно. Можно как-то на этапе выбора папки, видеть все файлы в папке и .pdf и .doc и все Эксель файлы и выбирать по дате изменения, чтобы видеть какие файлы макрос не обработал, когда прервался ? Ну, типа вручную выбрать 10 файлов из 100

Спасибо !
 
Цитата
Сергей Бровков написал:
Как изменить порядковый номер листа, на название листа ?
В моем предыдущем сообщении, под спойлером, есть код, где обращение к новому листу идут по имени, и в зависимости от, обрабатываемой в данный момент, папки
Цитата
Сергей Бровков написал:
Ну, типа вручную выбрать 10 файлов из 100
Это совсем другой подход
ДИАЛОГОВОЕ ОКНО ВЫБОРА ФАЙЛОВ/ПАПКИ на том же ресурсе
Цитата
Сергей Бровков написал:
Можно как-то на этапе выбора папки, видеть все файлы в папке и .pdf и .doc и все Эксель файлы
Это настраивается в маске диалога
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
В моем предыдущем сообщении, под спойлером, есть код, где обращение к новому листу идут по имени, и в зависимости от, обрабатываемой в данный момент, папки
Исправлено.

Цитата
написал:
Это настраивается в маске диалога
Скрытый текст

В приципе все работает, НО так как книг в папке много (поэтому я вручную и чтобы ничего не перепутать выбираю папку которая мне нужна) эксель экстренно сам по себе закрывается и не обрабатывает все книги, а только какую-то часть.

И когда я выбираю например 10 книг из 100, то он все равно пытается обработать все 100 книг а не те 10 которыя я выбрал.

Почему так происходит и где ошибка ?
 
Попробуйте такой код
Код
Sub ShowFileDialog()
Dim lf As Long
Dim wb As Workbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Filters.Clear 'очищаем установленные ранее типы файлов
    .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
    If .Show = 0 Then Exit Sub 'показывает диалог
    'цикл по коллекции выбранных в диалоге файлов
    For lf = 1 To .SelectedItems.Count
        Set wb = Workbooks.Open(.SelectedItems(lf))
         'действия с файлом
        wb.Sheets("2").Range("D23").Value = "dummy" & vbCrLf & "dummy"
        wb.Sheets("ПРИЛОЖЕНИЯ").Range("E44").Value = "dummy"
        wb.Sheets("ПРИЛОЖЕНИЯ").Range("E45").Value = "dummy"
    Next
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Попробуйте такой код
Теперь код работает идеально. Заменяет значения в хоть в 1 книге из 100 хоть в 99 из 100.

Только забыли строку одну перед Next

'Закрываем книгу с сохранением изменений
      wb.Close True

В общем спасибо большое. Странно что такой код я не нашел в сети.
Страницы: 1
Наверх