Доброго времени суток. Давно не занимался VBA и многое уже забыл, нужна помощь. Есть два листа в книге, первый выполняет роль шаблона, второй имеет таблицу данных (столбцы А и В) Нужно сделать несколько действий в одном макросе:
1) Сделать 10 копий листа шаблон. 2) Присвоить каждому листу имя из диапазона А1:А10 с листа Данные. 3) В каждом новом листе изменить (частично) ячейку А26, то есть добавить содержимое из столбца В1:В10
Суть в чем. 1) Сделать макрос на копирование 10 листов я сделал.
Код
Sub Copy_10Sheets()
x = InputBox("1")
For numtimes = 1 To x
Application.DisplayAlerts = False
Sheets("Шаблон").Copy After:=Sheets(2)
Next
End Sub
2) Сделать копию листа с именем, смог додуматься только до этого, и то благодаря макрорекодеру
Код
Sub Макрос2()
Dim shNewSheet As Excel.Worksheet
Set shNewSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
shNewSheet.Name = Worksheets(1).Range("A7").Text
End Sub
То есть задать в первом макросе имя для нового листа я не смог, а лишь создал новый лист с именем из столбца 3) Изменить частично ячейку
Код
Sub macro_copy_cell()
Sheets("Данные").Select
Range("B7").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "200"
Sheets("Шаблон").Select
Range("A26").Select
ActiveCell.FormulaR1C1 = "200 SMS"
End Sub
Но проблема в том, в макрорекодере я уже указал что копирую, то есть конкретно "200" а не содержимое ячейки.
Товарищи, понимаю что мои вопросы могут показаться крайне глупыми, но на ночь глядя, ничего умнее придумать я тут не могу. Помогите пожалуйста.
Sub Make10SheetCopy()
Dim i&
For i = 1 To 10
Worksheets(1).Copy after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = Worksheets(2).Cells(i, 1)
Cells(26, 1) = Worksheets(2).Cells(i, 2) & Cells(26, 1)
Next
End Sub
Два и три это запуск цикла от 1 до 10 Четыре это копия листа (1), в моем случае это лист два Пять это присвоить имя листов (не совсем понятная связь с функцией .count) задает имя листов из листа 2 (в моем случае лист 1) равной i первого стобца (Столбца А) проблема тут в том что у меня массив начинается с ячейки А7, ну и получается ошибка. Шесть - по сути понятно вроде бы что нужно сделать, но он ничего не делает и не меняет ячейки.
Исходные данные имею таблицу массив. Надо сделать макрос, который будет копировать лист Шаблон 10 раз, и каждый лист будет именоваться из столбца А, а в ячейку А10 (листа Шаблон) будет заменяться выражение ХХХ на число из столбца В.
Сделать копию 10 листов я понял, а вот с именами и заменой в ячейке я повис.
Sub CopySheet()
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To 10
Sheets("Шаблон").Copy After:=Sheets(Sheets.Count)
With ActiveSheet
.Name = Sheets("Данные").Cells(i + 1, 1)
.Range("A10") = Sheets("Данные").Cells(i + 1, 2)
End With
Next
Application.ScreenUpdating = True
End Sub
А зачем DisplayAlerts? Я специально отключал обновление экрана, чтобы избежать мелькания. По вопросу - макрос может, если ему объяснить, что от него требуется )
Юрий М Ну полный шаблон он большой и содержит много именных ячеек, и почему-то вылетает сообщение что имя занято, но это не важно.
Суть вопроса про макрос, если глянуть мой шаблон выше, что на втором листе в ячейке А10 стоит фраза (ХХХ раз) можно ли сделать макрос чтобы он частично редактировал ячейку, то есть заменил значение ХХХ но оставил слово РАЗ.
Никогда не формулируйте вопросы аналогичным образом (#12), если не хотите получать ответы в стиле #13 )) Вариант:
Код
Sub CopySheet()
Dim i As Long, Stroka As String
Stroka = " " & Split(Sheets("Шаблон").Range("A10"))(1)
Application.ScreenUpdating = False
For i = 1 To 10
Sheets("Шаблон").Copy After:=Sheets(Sheets.Count)
With ActiveSheet
.Name = Sheets("Данные").Cells(i + 1, 1)
.Range("A10") = Sheets("Данные").Cells(i + 1, 2) & Stroka
End With
Next
Application.ScreenUpdating = True
End Sub