Консультация № 180665
10.11.2010, 09:02
78.81 руб.
0 3 1
Здраствуйте уважаемые эксперты!
Подскажите, как создать макрос на добавление нового листа в книгу по подобию предыдущего то есть на основе Листа 3 создать Лист 4, затем на основе Листа 4 создать Лист 5, при этом ячейка А2 в Листе 4 ссылается на ячейку А2 в Лист 3 аналогичная связь должна остаться между Листом 5 и Листом 4.
Заранее благодарен за ответ.
Буду очень признателен если будет описан механизм работы макроса.
С Уважением Филоненко Юрий!

Обсуждение

давно
Профессор
230118
3054
10.11.2010, 10:39
общий
В новом листе должны копироваться все данные с прежнего? Ссылка должна быть гиперссылкой?
Неизвестный
10.11.2010, 12:46
общий
Да обсалютно все данные, а ссылка должна точно отражать содержание листа с которого создали новый, Я могу прислать файлик чуть по позже для наглядной демонстрации моей задумки.
давно
Модератор
137394
1850
10.11.2010, 13:59
общий
это ответ
Здравствуйте, Филоненко Юрий!
Вот код макроса, который выполняет поставленную задачу. В начале в строковых переменных определяем имена листов, и адрес ячейки для связи, далее в макросе по тексту даны пояснения
Код:
sub rrr()
'
Name0 = "Лист3" ' Имя исходного листа
Name1 = "Лист4" ' Имя первого создаваемого листа
Name2 = "Лист5" ' Имя второго создаваемого листа
RFormula = "A2" ' На какую ячейку сошлемся
'
Sheets(Name0).Copy After:=Sheets(Name0) ' Копируем лист Name0, вставляем его после листа Name0
ActiveSheet.Name = Name1 ' Переименовываем получившийся лист
Range(RFormula) = "=" + Name0 + "!" + RFormula ' Вставляем формулу в ячейку RFormula =Лист3!A2
'
Sheets(Name1).Copy After:=Sheets(Name1)
ActiveSheet.Name = Name2
Range(RFormula) = "=" + Name1 + "!" + RFormula
'
End Sub
Как легко увидеть в коде, один и тот же набор действий делается дважды. Поэтому резонно одинаковые действия оформить в виде процедуры. Вот пример такого решения - здесь дважды вызывается организованная мной процедура InsList, в которую передаются необходимые данные.
Код:
Sub sss()
'
Name0 = "Лист3" ' Имя исходного листа
Name1 = "Лист4" ' Имя первого создаваемого листа
Name2 = "Лист5" ' Имя второго создаваемого листа
RFormula = "A2" ' На какую ячейку сошлемся
'
InsList Name0, Name1, RFormula
InsList Name1, Name2, RFormula
End Sub

Sub InsList(N0, N1, R)
Sheets(N0).Copy After:=Sheets(N0) ' Копируем лист N0, вставляем его после листа N0
ActiveSheet.Name = N1 ' Переименовываем получившийся лист
Range(R) = "=" + N0 + "!" + R ' Вставляем формулу в ячейку R
End Sub
Естественно, исходный лист должен обязательно присутствовать, а листов, совпадающих по названию с создаваемыми, быть не должно, иначе получим ошибочную ситуацию.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа