Страницы: 1
RSS
VBA изменение группы выделенных листов
 
Уважаемые коллеги, добрый день.
Не могу найти решение следующего вопроса - нужны знания гуру теории excel:
Макросом генерирую выгрузки одинаковых по своей структуре листов, собираю в одну книгу,  далее мне нужно вставить два столбца с формулами. Столбцы добавляются на всех выделенных листах, но формула - только на активном. (При изменении формулы макросом выделение группы не слетает)    
Код
Sheets(2).Activate
For I = ActiveWorkbook.Sheets.Count To 2 Step -1 'выделил нужные листы
    Sheets(I).Select (False)
Next
Columns("AH:AI").Select : Selection.Insert Shift:=xlToRight 'вставил столбцы
Range("AH4").FormulaR1C1 = "=SUMIFS(R[-1]C19:R[-1]C30,R2C[-15]:R2C[-4],"">=""&DATE(YEAR(NOW()),1,1)&"""",R2C[-15]:R2C[-4],""<""&NOW()&"""")" 'вставил формулу

как вариант  - перебор листов, но хотелось бы избежать этого.
Код
Sub AllWorkSheets()
Dim Arr() As String 
Dim I As Long 
ReDim Arr(Worksheets.Count) :Arr(0) = Worksheets.Count
For I = 1 To Worksheets.Count : Arr(I) = Worksheets(I).Name :Next I
For I = 1 To Arr(0) : Sheets(Arr(I)).Select  : Application.Run "personal.xls!MarkCells" :Next I 
End Sub
Подскажите пожалуйста, как можно вставить формулу макросом на группу выделенных листов без перебора (возможно ли это)
 
а зачем избегать перебора листов?
так пробуйте
Код
Application.ScreenUpdating = False
For I = ActiveWorkbook.Sheets.Count To 2 Step -1 'перебрал нужные листы
    Sheets(I).Columns("AH:AI").Insert Shift:=xlToRight  'вставил столбцы
    Sheets(I).Range("AH4").FormulaR1C1 = "..." 'вставил формулу
Next
Application.ScreenUpdating = True
 
Игорь, спасибо за ответ.
Перебором не хотелось - из-за потери времени (очень долгая выгрузка исходных данных из источников).
Кроме формул присутствует еще и форматирование. но видимо нет другого пути.
Вопрос возник так как вручную формула проставляется на группе листов, макросом нет - чую делаю что-то не так.
 
Здравствуйте.
Если я правильно понял вопрос:
Код
Sheets(Array("Лист1", "Лист2", "Лист3")).Select
    ActiveCell.FormulaR1C1 = "=1+2"

Выделяем группу листов, вставляем формулу на активном листе (из этой группы, т.е. если активный лист в группу не входит - активируем нужный лист из группы предварительно), и эта формула повторяется на всех листах.
Изменено: Пытливый - 25.04.2016 12:30:30
Кому решение нужно - тот пример и рисует.
 
Wow! То что нужно, Пытливый,огромное спасибо!
Код
Range("AH4").Select
    ActiveCell.FormulaR1C1 = "=SUMIFS(R[-1]C19:R[-1]C30,R2C[-15]:R2C[-4],"">=""&DATE(YEAR(NOW()),1,1)&"""",R2C[-15]:R2C[-4],""<""&NOW()&"""")"
заработало, видимо надо было сначала макрорекодер запустить )
Всем спасибо. вопрос закрыт.
Страницы: 1
Наверх