Страницы: 1
RSS
Вставка строки во всех листах с протяжкой формул
 
Здравствуйте,
Помогите, пожалуйста, с написанием макроса.
Есть файл с листами.
Первый лист - "Итоги", в нем вносятся наименования товара (в первые два столбца),
тут же столбцы, данные в которые берутся из остальных листов.
Другие листы - это покупатели, в них вносятся количество товара и дата покупки.
Наименования в листах с покупателями берутся из листа "Итоги" через формулу.
Покупатели добавляются.
Задача:
необходимо добавлять новые наименования, но не в последнюю строку а,
например, в середине, всоответсвие с группой товара.
И чтобы эта строка добавлялась во все остальные листы с протяжкой формул.
С горем пополам наваял макрос:
выделяешь строку, над которой надо вставить наименование.
Запускаешь макрос. Он вставляет строки во всех листах, и всталяет все данные из следующей сроки.
Необходимо чтобы протягивались только формулы, а ячейки, в которые вносят значения,
оставались пустыми.
Пример в файле.
Спасибо.
 
Поиском не пробовали пользоваться
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=32633
 
Кросс. Обсуждение идёт ЗДЕСЬ
 
Спасибо всем, буду разбираться.
 
Вроде бы проблему решил используя цикл.
Это конкретно для моего случая.
Принцип работы макроса:
В первом листе "Итоги" выделяем строку над которой надо вставить.
Alt+F8 Выполнить Insert_Rows
Может кому пригодится.
Выглядит топорно и напрягает видимый перебор листов при выполнении макроса, но как смог, чайник я.
Если кто-то решит доработать, скажу большое спасибо.
Вот код макроса (первый лист "Итоги", названия последующих для макроса не принципиально):
Код
Sub Insert_Rows()
' если выделено больше одной строки или не строка выход
If Selection.Rows.Count > 1 Then
MsgBox "Выделите только одну строку", vbOKOnly
Exit Sub
End If
If Selection.Cells.Count < 20 Then
MsgBox "Выделите строку", vbOKOnly
Exit Sub
End If

'выделяем все листы в книге
Worksheets.Select
Sheets("Итоги").Activate
    
'присваиваем выделеную строку
r_ = Selection.Row
'вставляем во все листы строку
    Selection.Insert Shift:=xlDown
    Application.CutCopyMode = False
    Sheets("Итоги").Select
    'создаем цикл для каждого листа
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Worksheets
    sh.Select
    'копируем предыдущую строку
    Rows(r_ - 1).Copy
    'выделяем вставленную и делаем вставку формул
    Rows(r_).Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, _
        SkipBlanks:=False, Transpose:=False
        'удаляем все кроме формул в строке
            On Error Resume Next
    Selection.SpecialCells(2).Value = Empty
    On Error GoTo 0
        Application.CutCopyMode = False
        Cells(1, 1).Select
         Next sh
         'выбираем первый лист, чтобы внести наименования в добавленную строку
         Sheets("Итоги").Select
         Cells(r_, 1).Select
End Sub
Страницы: 1
Читают тему
Наверх