Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Групповое выполнение макросов - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Групповое выполнение макросов
Сергей-К Дата: Суббота, 21.03.2015, 01:43 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Доброй ночи.
Подскажите, пожалуйста, как реализовать в коде поочерёдное открытие одноименных файлов и выполнить в них один и тот же код.
Подпапки с порядковыми номерами от 1 до 5; в каждой из них содержатся файлы .xlsb; в которых имеется такой код:

[vba]
Код
Sub Макрос1 ()

     adr = Cells(1, 1)
     ChDir adr
     Workbooks.Open Filename:=adr & "\База.xlsx"
      
     Windows("Сбор.xlsb").Activate
     Range("B3").Select
     ActiveCell.FormulaR1C1 = "=[ База.xlsx]Лист1!R1C1"
     Selection.Copy
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
         :=False, Transpose:=False
     Application.CutCopyMode = False
          
     Windows("База.xlsx ").Activate
     ActiveWindow.Close
      
     ActiveWorkbook.Save
     ActiveWorkbook.Close
      
End Sub
[/vba]

Я создаю книгу и вставляю такой код:

[vba]
Код
Sub Макрос1()

     окончание = [B4]
     For счётчик = 1 To окончание

     ActiveCell.FormulaR1C1 = "=ROW()-2"
      
     adr = Cells(1, 1)
     ChDir adr
     Workbooks.Open Filename:=adr & "\Сбор.xlsb"
      
     Application.Run _
         "Сбор.xlsb!Макрос1"
      
     Windows("Цикл.xlsb").Activate
     ActiveCell.Offset(1, 0).Range("A1").Select
      
Next счётчик
      
End Sub
[/vba]

Но вот беда, после первого успешного прохода макрос останавливается. Как исправить?
Спасибо.
К сообщению приложен файл: 9152559.rar (72.1 Kb)
 
Ответить
СообщениеДоброй ночи.
Подскажите, пожалуйста, как реализовать в коде поочерёдное открытие одноименных файлов и выполнить в них один и тот же код.
Подпапки с порядковыми номерами от 1 до 5; в каждой из них содержатся файлы .xlsb; в которых имеется такой код:

[vba]
Код
Sub Макрос1 ()

     adr = Cells(1, 1)
     ChDir adr
     Workbooks.Open Filename:=adr & "\База.xlsx"
      
     Windows("Сбор.xlsb").Activate
     Range("B3").Select
     ActiveCell.FormulaR1C1 = "=[ База.xlsx]Лист1!R1C1"
     Selection.Copy
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
         :=False, Transpose:=False
     Application.CutCopyMode = False
          
     Windows("База.xlsx ").Activate
     ActiveWindow.Close
      
     ActiveWorkbook.Save
     ActiveWorkbook.Close
      
End Sub
[/vba]

Я создаю книгу и вставляю такой код:

[vba]
Код
Sub Макрос1()

     окончание = [B4]
     For счётчик = 1 To окончание

     ActiveCell.FormulaR1C1 = "=ROW()-2"
      
     adr = Cells(1, 1)
     ChDir adr
     Workbooks.Open Filename:=adr & "\Сбор.xlsb"
      
     Application.Run _
         "Сбор.xlsb!Макрос1"
      
     Windows("Цикл.xlsb").Activate
     ActiveCell.Offset(1, 0).Range("A1").Select
      
Next счётчик
      
End Sub
[/vba]

Но вот беда, после первого успешного прохода макрос останавливается. Как исправить?
Спасибо.

Автор - Сергей-К
Дата добавления - 21.03.2015 в 01:43
Сергей-К Дата: Суббота, 21.03.2015, 01:56 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
И я буду очень признателен, если поясните, как можно возобновить процедуру. К примеру, после выполнения 2 проходов документ "Сбор" будет успешно сохранён в подпапках 1 и 2, а затем через Диспетчер задач процесс "Excel" был завершён принудительно. Как запустить оставшиеся 3 переноса данных.
Спасибо.


Сообщение отредактировал Сергей-К - Суббота, 21.03.2015, 01:59
 
Ответить
СообщениеИ я буду очень признателен, если поясните, как можно возобновить процедуру. К примеру, после выполнения 2 проходов документ "Сбор" будет успешно сохранён в подпапках 1 и 2, а затем через Диспетчер задач процесс "Excel" был завершён принудительно. Как запустить оставшиеся 3 переноса данных.
Спасибо.

Автор - Сергей-К
Дата добавления - 21.03.2015 в 01:56
KSV Дата: Суббота, 21.03.2015, 06:49 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
в файлах "Сбор.xlsb" последняя строка макроса:
[vba]
Код
ActiveWorkbook.Close
[/vba]
закрывает сам файл "Сбор.xlsb", поэтому макрос не успевает отработать до конца и управление не передается обратно в цикл, т.ч. файлы "Сбор.xlsb" нужно закрывать непосредственно из цикла.
а вообще, так писать (привязываясь к активному окну) - очень плохая практика! (мало ли кто и куда мышкой кликнет во время работы твоих макросов и кто знает какое окно после этого клика станет активным?...)
т.ч. лучше работать с объектными переменными.

например, вот так:
[vba]
Код
Sub Макрос1()

        'Перед запуском выделить жёлтую ячейку!!!
            
        окончание = [B4]
        For счетчик = 1 To окончание
                
            ActiveCell.Value = счетчик
                
            adr = Cells(1, 1)
            Set objWrkBook = Workbooks.Open(adr & "\Сбор.xlsb")
                
            Application.Run _
                "Сбор.xlsb!Макрос1"
                
            objWrkBook.Close True ' закрываем Сбор.xlsb (с сохранением)
                
            ActiveCell.Offset(1, 0).Select
                
        Next счетчик
            
        ' освобождаем ссылку на объект, чтобы виндовый сборщик мусора освободил память
        Set objWrkBook = Nothing
            
End Sub
[/vba]

[vba]
Код
Sub Макрос1()
            
        adr = Cells(1, 1)
        Set objWrkBook = Workbooks.Open(adr & "\База.xlsx")
            
        ' копируем данные из [База.xlsx]Лист1!A1
        ' в ячейку "B3" активного листа в книге Сбор.xlsb
        ThisWorkbook.ActiveSheet.Range("B3").Value = objWrkBook.Worksheets("Лист1").Cells(1, 1).Value
            
        objWrkBook.Close False ' закрываем База.xlsx (без сохранения)
        Set objWrkBook = Nothing
            
End Sub
[/vba]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Суббота, 21.03.2015, 06:56
 
Ответить
Сообщениев файлах "Сбор.xlsb" последняя строка макроса:
[vba]
Код
ActiveWorkbook.Close
[/vba]
закрывает сам файл "Сбор.xlsb", поэтому макрос не успевает отработать до конца и управление не передается обратно в цикл, т.ч. файлы "Сбор.xlsb" нужно закрывать непосредственно из цикла.
а вообще, так писать (привязываясь к активному окну) - очень плохая практика! (мало ли кто и куда мышкой кликнет во время работы твоих макросов и кто знает какое окно после этого клика станет активным?...)
т.ч. лучше работать с объектными переменными.

например, вот так:
[vba]
Код
Sub Макрос1()

        'Перед запуском выделить жёлтую ячейку!!!
            
        окончание = [B4]
        For счетчик = 1 To окончание
                
            ActiveCell.Value = счетчик
                
            adr = Cells(1, 1)
            Set objWrkBook = Workbooks.Open(adr & "\Сбор.xlsb")
                
            Application.Run _
                "Сбор.xlsb!Макрос1"
                
            objWrkBook.Close True ' закрываем Сбор.xlsb (с сохранением)
                
            ActiveCell.Offset(1, 0).Select
                
        Next счетчик
            
        ' освобождаем ссылку на объект, чтобы виндовый сборщик мусора освободил память
        Set objWrkBook = Nothing
            
End Sub
[/vba]

[vba]
Код
Sub Макрос1()
            
        adr = Cells(1, 1)
        Set objWrkBook = Workbooks.Open(adr & "\База.xlsx")
            
        ' копируем данные из [База.xlsx]Лист1!A1
        ' в ячейку "B3" активного листа в книге Сбор.xlsb
        ThisWorkbook.ActiveSheet.Range("B3").Value = objWrkBook.Worksheets("Лист1").Cells(1, 1).Value
            
        objWrkBook.Close False ' закрываем База.xlsx (без сохранения)
        Set objWrkBook = Nothing
            
End Sub
[/vba]

Автор - KSV
Дата добавления - 21.03.2015 в 06:49
Сергей-К Дата: Суббота, 21.03.2015, 13:53 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
KSV, спасибо! Мысль понятна - рабочие файлы сборов следует закрывать в файле управления. А насчёт активных окон, я ещё месяц назад боялся смотреть на любые коды. Пока только так, учимся. Ещё раз, спасибо!
 
Ответить
СообщениеKSV, спасибо! Мысль понятна - рабочие файлы сборов следует закрывать в файле управления. А насчёт активных окон, я ещё месяц назад боялся смотреть на любые коды. Пока только так, учимся. Ещё раз, спасибо!

Автор - Сергей-К
Дата добавления - 21.03.2015 в 13:53
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!