Создание копий листов с меняющимся источником формул

Программирование на Visual Basic for Applications
almost_dead
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 17.08.2006 (Чт) 15:05

Создание копий листов с меняющимся источником формул

Сообщение almost_dead » 11.06.2007 (Пн) 20:17

Задачка пусть и без звездочки, но интересная:
Есть 2 листа: A - источник, на нем данные; B - берет с A формулами цифирки и их в себя раскидывает. Надо - создать N копий пар A,B.
Вариант с копированием листов и перебором всех ячеек с формулами с последующим реплэйсом не пойдет - на листе B есть изначально "битые" ссылки (содержат "#REF"), которые нельзя корректно присвоить.
Сам Эксель перелинковывает формулы прекрасно - каждый видел, когда переименовывал лист, допустим.
Можно конечно создавать новую книгу, в нее класть оба листа, ренэймить, потом их обратно перемещать в исходную ... и т.д., но это некрасиво :wink:. Как бы это попроще?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 12.06.2007 (Вт) 15:16

Если на листах нет текста длиннее 255 знаков ( http://support.microsoft.com/kb/213548 ), то так:

Код: Выделить всё
Sub test()
    Dim i As Long   
    Application.ScreenUpdating = False
    With ThisWorkbook
        For i = 1 To 5
            .Worksheets(Array("A", "B")).Copy , .Worksheets(.Worksheets.Count)
        Next i
    End With
    Application.ScreenUpdating = True
End Sub
Привет,
KL

almost_dead
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 17.08.2006 (Чт) 15:05

Сообщение almost_dead » 12.06.2007 (Вт) 16:40

Большое спасибо, не знал, что могу обращаться сразу к нескольким листам! Единственное "но" - невозможно однозначно задать имена при копировании ... :roll:

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 12.06.2007 (Вт) 19:03

almost_dead писал(а):Большое спасибо, не знал, что могу обращаться сразу к нескольким листам! Единственное "но" - невозможно однозначно задать имена при копировании ... :roll:


Код: Выделить всё
Sub test()
    Dim i As Long, LSheet As Long
    Application.ScreenUpdating = False
    With ThisWorkbook
        For i = 1 To 5
            LSheet = .Worksheets.Count
            .Worksheets(Array("A", "B")).Copy , .Worksheets(LSheet)
            .Worksheets(LSheet + 1).Name = "A" & i
            .Worksheets(LSheet + 2).Name = "B" & i
        Next i
    End With
    Application.ScreenUpdating = True
End Sub


Код: Выделить всё
Sub test()
    Dim i As Long
    Application.ScreenUpdating = False
    With ThisWorkbook
        For i = 1 To 5
            .Worksheets(Array("A", "B")).Copy , .Worksheets(.Worksheets.Count)
            .Worksheets(.Worksheets.Count - 1).Name = "A" & i
            .Worksheets(.Worksheets.Count).Name = "B" & i
        Next i
    End With
    Application.ScreenUpdating = True
End Sub
Привет,
KL


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 107

    TopList