Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2012, 19:41   #1
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию Открытие группы файлов и выполнение в них макроса.

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

Заранее всем спасибо.
drNabla вне форума Ответить с цитированием
Старый 23.04.2012, 20:35   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я так думаю, что этот макрос во всех файлах один и тот же?
Если да, то проще схему поменять - помещаете макрос в файл-инструмент (или в personal.xls), меняете его на работу с активным файлом (ну или меняете на работу с конкретной открытой книгой), затем в цикле открываете все нужные файлы и обрабатываете одним макросом.
В тех файлах макросы можно оставить, если он ещё нужен для других задач.

Можно перебирать все файлы определённой папки, или фильтровать их по определённому критерию, ну а если они раскиданы как попало и ничего общего не имеют - тогда составляйте список (массив имён) и перебирайте его.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.04.2012, 20:41   #3
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

да макрос везде один и тот же. а то что эти макросы ссылаются на информацию в этих файлах это не повредит? хотя кажется не должно... а как это выглядеть будет? еслиб я знал как это реализовать я бы наверное не стал сюда обращаться... а то я ни когда не работал с подобными вещами... а времени разбираться почти нет в новых тонкостях.
drNabla вне форума Ответить с цитированием
Старый 23.04.2012, 20:48   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот нашёл подходящую цитату (автор кода Казанский):


=================================== ===========================
Есть папка. В ней ещё несколько папок.
В них куча абсолютно одинаковых по структуре файлов.
Задача: макросом зайти в каждый файл и сделать следующее:
1. Снять защиту листа, пароль"123"
2. Скопировать - вставить значение объединённой ячейки В8
3. Удалить все столбцы правее столбца О
4. Удалить все строки ниже строки 30
5. Удалить все коды что находятся в модуле "Эта книга"
6. Сохранить файл в том же месте, где он и был, под тем же именем.

Казанский

10.10.2010, 21:38
Вот код модуля. В соответствии с заданием, пароль на лист обратно не устанавливается.

Код:
Option Explicit
Option Compare Text

Const FLDR As String = "C:\TEMP\1"

Sub Serge_007()

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        processFolder FLDR
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    MsgBox "Готово"
End Sub

Private Sub processFolder(fName As String)
    Dim fso As Object, file As Object, wb As Workbook, VBC As Object

    Set fso = CreateObject("scripting.filesystemobject")
    Set fso = fso.getfolder(fName)
    For Each file In fso.Files
        If file.Name Like "*.xls*" Then
            Set wb = Workbooks.Open(file)
            With wb.Sheets(1)
                .Unprotect Password:="123"
                .Range("B8").Value = .Range("B8")
                Range(.Columns("P:P"), .Columns(.Columns.Count)).Delete
                Range(.Rows(31), .Rows(.Rows.Count)).Delete

            End With
            For Each VBC In wb.VBProject.VBComponents
                If VBC.Name = "ThisWorkbook" Or VBC.Name = "ЭтаКнига" Then
                    VBC.codemodule.deletelines 1, VBC.codemodule.countoflines
                    Exit For
                End If
            Next
            wb.Close True
        End If
    Next

    ' Для каждой подпапки в папке просто вызывается эта же подпрограмма!
    For Each file In fso.subfolders
        processFolder file.Path
    Next

End Sub
=================================== ===========================

Но конечно нужно смотреть конкретно, что там за макросы, что они делают.
Но если это не макросы, обрабатывающие события листа/книги, то практически всегда (сейчас не вспомнил случая, когда это не возможно) нет разницы, где они находятся - всегда их можно переделать на работу из другой книги.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 23.04.2012 в 20:54.
Hugo121 вне форума Ответить с цитированием
Старый 23.04.2012, 20:54   #5
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

на первый взгляд именно то что мне надо. Из приведённых 6ти пунктов мне надо выполнить только шестой и вместо пяти первых по сути нажатие на определённую кнопку на определённом листе. Как мне кажется это гдето должно быть здесь:

Код:
With wb.Sheets(1)
.Unprotect password:="123"
.Range("B8").Value = .Range("B8")
Range(.Columns("P:P"), .Columns(.Columns.Count)).Delete
Range(.Rows(31), .Rows(.Rows.Count)).Delete

End With
For Each VBC In wb.VBProject.VBComponents
If VBC.Name = "ThisWorkbook" Or VBC.Name = "ЭтаКнига" Then
VBC.codemodule.deletelines 1, VBC.codemodule.countoflines
Exit For
End If
Next
не подскажите как это сделать?
drNabla вне форума Ответить с цитированием
Старый 23.04.2012, 21:15   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Что делает эта кнопка?
Зачем её нажимать (это сделать думаю не получится, или очень трудно, я даже думать на эту тему не собираюсь... ибо бестолково) - проще выполнить такой же код в файле-обработчике. Если это конечно возможно.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.04.2012, 23:13   #7
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

я об этом не задумывался... точнее точно не знаю возможно ли это... кнопка выполняет следующее - считывает с разных листов информацию (в основном значения) и передаёт их в макрос что бы тот с этой информацией уже работал, макросов разных много потом вся полученная информация сохраняется на других листах файла... как-то так... я думал что есть функция типа "CommandButton1_Click()" которая без нажатия запустит выполнения всех функций которые под этим заложены... просто я изначально всё делал под вариант с кнопкой, а щас надо очень большое количество данных обработать за быстрое время, и хочется автоматизировать процесс...
drNabla вне форума Ответить с цитированием
Старый 23.04.2012, 23:13   #8
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

могу для примера приложить пробный файл
drNabla вне форума Ответить с цитированием
Старый 23.04.2012, 23:22   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну можно конечно программно выполнить CommandButton1_Click(), раз уж там в цепочке много макросов завязано.
Что-то вроде Application.Run "Книга1!CommandButton1_Click"
Но лучше покажите файл, мы посмотрим.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 23.04.2012 в 23:26.
Hugo121 вне форума Ответить с цитированием
Старый 23.04.2012, 23:36   #10
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

нужная кнопка находится на листе "ввод информации" кнопка называется "пресс ми!" закрывать надо файл когда в ячейке О12 будет написано "закончил"
Вложения
Тип файла: rar test.rar (1.97 Мб, 54 просмотров)
drNabla вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повторное выполнение макроса Jaroslav Microsoft Office Excel 3 26.07.2009 10:12
Как остановить выполнение макроса ? kzld Microsoft Office Excel 2 19.07.2009 13:16
Выполнение макроса при нажатии на Лист KinderX Microsoft Office Excel 7 01.07.2009 17:19
Открытие необходимой группы в локальной сети (UNC) nixstill Работа с сетью в Delphi 0 15.01.2009 13:56
Выполнение макроса во всех листах Bu$ter Microsoft Office Excel 18 14.11.2008 14:34