Здравствуйте! На этом форуме мне помогли написать код по созданию новых листов в зависимости от условия в ячейке. Подскажите, как сделать так, чтобы создавались новые страницы в зависимости от того, что написано в ячейке B3? Например: если в ячейке B3 написать цифру 2, то появятся 2 новых листа, если поставить цифру 3, то появятся 3 новых листа и т.д. то есть создаётся столько листов сколько указано в ячейке B3. Помогите "допилить" код.
Здравствуйте! На этом форуме мне помогли написать код по созданию новых листов в зависимости от условия в ячейке. Подскажите, как сделать так, чтобы создавались новые страницы в зависимости от того, что написано в ячейке B3? Например: если в ячейке B3 написать цифру 2, то появятся 2 новых листа, если поставить цифру 3, то появятся 3 новых листа и т.д. то есть создаётся столько листов сколько указано в ячейке B3. Помогите "допилить" код.Dmitry1992_92
Я как раз пишу по старой теме код. Не нравится мне предложенное там решение. И вопросы возникли: 1. Представим, что у нас в книге есть уже 5 листов-ящиков. Мы вводим цифру 3. Тогда листы 4 и 5 должны быть удалены, правильно? 2. Представим, что у нас есть 3 листа-ящика. В них уже заполнены данные в ячейках В5 и В6. Мы вводим цифру 4. понятно, что добавляется незаполненный лист 4, а что делать с уже существующими листами 1, 2 и 3? Оставлять имеющиеся значения в ячейках В5 и В6 (и, возможно, в других каких-то заполненных ячейках) или формировать листы заново? 3. Может ли быть такое, что в файле существуют листы "Ящик 2" и "Ящик 3", но нет листа "Ящик 1"? Другими словами - всегда ли соблюдается последовательность 1-2-3-...n? И, кстати, всегда ли эти листы по порядку расположены? 4. Могут ли быть в книге другие листы (не ящики)?
Я как раз пишу по старой теме код. Не нравится мне предложенное там решение. И вопросы возникли: 1. Представим, что у нас в книге есть уже 5 листов-ящиков. Мы вводим цифру 3. Тогда листы 4 и 5 должны быть удалены, правильно? 2. Представим, что у нас есть 3 листа-ящика. В них уже заполнены данные в ячейках В5 и В6. Мы вводим цифру 4. понятно, что добавляется незаполненный лист 4, а что делать с уже существующими листами 1, 2 и 3? Оставлять имеющиеся значения в ячейках В5 и В6 (и, возможно, в других каких-то заполненных ячейках) или формировать листы заново? 3. Может ли быть такое, что в файле существуют листы "Ящик 2" и "Ящик 3", но нет листа "Ящик 1"? Другими словами - всегда ли соблюдается последовательность 1-2-3-...n? И, кстати, всегда ли эти листы по порядку расположены? 4. Могут ли быть в книге другие листы (не ящики)?_Boroda_
1. Да, они удаляются тоже 2. В ячейках пусть остаются имеющиеся значения 3. Если есть листы "Ящик 2" и "Ящик 3", но нет листа "Ящик 1", тогда следующий новый лист будет называться "Ящик 4", то есть последовательность сохраняется, несмотря на то, что отсутствует один из листов. 4. Нет, не могут, только листы с называнием "Ящики".
1. Да, они удаляются тоже 2. В ячейках пусть остаются имеющиеся значения 3. Если есть листы "Ящик 2" и "Ящик 3", но нет листа "Ящик 1", тогда следующий новый лист будет называться "Ящик 4", то есть последовательность сохраняется, несмотря на то, что отсутствует один из листов. 4. Нет, не могут, только листы с называнием "Ящики".Dmitry1992_92
Тогда так: кладем этот код в модуль книги (не листа!!!)
[vba]
Код
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range) Dim shn As Worksheet If Target.Count > 1 Then Exit Sub If Not IsNumeric(Target) Then Exit Sub mask_ = "Ящик" If sh.Name = mask_ Then If Target.Address(0, 0) = "B1" Then On Error Resume Next zt_ = CByte(Target.Value) If Err Then Exit Sub On Error GoTo 0 For Each shn In Me.Worksheets With shn If IsNumeric(Right(shn.Name, 1)) Then nom_ = CByte(Replace(shn.Name, mask_ & " ", "")) If nom_ > zt_ Then Application.DisplayAlerts = 0 .Delete Application.DisplayAlerts = 1 Else If nom_ > nom1_ Then nom1_ = nom_ End If End If End If End With Next shn If zt_ > nom1_ Then Application.ScreenUpdating = 0 Application.EnableEvents = 0 For i = nom1_ + 1 To zt_ sh.Copy After:=Sheets(ThisWorkbook.Sheets.Count) Set shn = ActiveSheet With shn .Range("A1:B2").Clear .Range("A3") = mask_ & " №" & i .Name = mask_ & " " & i End With Next i sh.Select 'если переход обратно на текущий лист не нужен, то уберите эту строку Application.EnableEvents = 1 Application.ScreenUpdating = 1 End If End If End If End Sub
[/vba]
Тогда так: кладем этот код в модуль книги (не листа!!!)
[vba]
Код
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range) Dim shn As Worksheet If Target.Count > 1 Then Exit Sub If Not IsNumeric(Target) Then Exit Sub mask_ = "Ящик" If sh.Name = mask_ Then If Target.Address(0, 0) = "B1" Then On Error Resume Next zt_ = CByte(Target.Value) If Err Then Exit Sub On Error GoTo 0 For Each shn In Me.Worksheets With shn If IsNumeric(Right(shn.Name, 1)) Then nom_ = CByte(Replace(shn.Name, mask_ & " ", "")) If nom_ > zt_ Then Application.DisplayAlerts = 0 .Delete Application.DisplayAlerts = 1 Else If nom_ > nom1_ Then nom1_ = nom_ End If End If End If End With Next shn If zt_ > nom1_ Then Application.ScreenUpdating = 0 Application.EnableEvents = 0 For i = nom1_ + 1 To zt_ sh.Copy After:=Sheets(ThisWorkbook.Sheets.Count) Set shn = ActiveSheet With shn .Range("A1:B2").Clear .Range("A3") = mask_ & " №" & i .Name = mask_ & " " & i End With Next i sh.Select 'если переход обратно на текущий лист не нужен, то уберите эту строку Application.EnableEvents = 1 Application.ScreenUpdating = 1 End If End If End If End Sub