Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2009, 13:25   #11
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

вот код:

Код:
Sub Main()
    Dim Nm As Integer, i As Integer, sh As Worksheet: Application.ScreenUpdating = False: Nm = 0
    Dim Nme As String
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name = "12" Then
            MsgBox "Год закончен!": Exit Sub
        End If
        On Error Resume Next: i = CInt(sh.Name)
        If Err = 0 Then Nm = IIf(Nm > i, Nm, i) Else On Error GoTo 0
    Next
    Nme = Nm
    Sheets(Array(("анализ_" & Nm), (Nme))).Copy after:=Sheets(Sheets.Count)
    Sheets("анализ_" & Nm & " (2)").Name = "анализ_" & Nm + 1
    Sheets(Nme & " (2)").Name = Nm + 1
      
End Sub
SAS888, посмотрите - может что улучшить можно?
kievlyanin вне форума Ответить с цитированием
Старый 05.08.2009, 05:17   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно. Например, так:
Код:
Sub Main()
    Dim Nm As Integer, i As Integer, sh As Worksheet: Application.ScreenUpdating = False: Nm = 0
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name = "12" Then
            MsgBox "Год закончен!": Exit Sub
        End If
        On Error Resume Next: i = CInt(sh.Name)
        If Err = 0 Then Nm = IIf(Nm > i, Nm, i) Else On Error GoTo 0
    Next
    Sheets(Array(("анализ_" & Nm), CStr(Nm))).Copy after:=Sheets(Sheets.Count)
    Sheets(Sheets.Count - 1).Name = "анализ_" & Nm + 1: Sheets(Sheets.Count).Name = Nm + 1
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 05.08.2009, 18:14   #13
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

CStr(Nm) - вот это подойдет ..

а это:
Sheets(Sheets.Count - 1).Name = "анализ_" & Nm + 1: Sheets(Sheets.Count).Name = Nm + 1

не подойдет.

лист анализ может быть как перед листом месяца так и после (порядок листов то уже заявлен как свободный) и при копировании порядок будет идентичен .. так что нельзя утверждать точно что Sheets.Count - 1 будет анализом а Sheets.Count месяцем .. может быть и наоборот .. так что надо через поиск имени.

но то таке - нюансы .. спасибо!
kievlyanin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копировние листов из одной книги в другую Jenik Microsoft Office Excel 4 04.03.2009 12:22
вставить в CheckBox на форме название только тех листов книги, которые помечены определенным символом? Bezdar Microsoft Office Excel 4 23.07.2008 15:30
Перенос данных из одной книги со многих листов в другую gavrylyuk Microsoft Office Excel 34 20.07.2008 21:39
Сортировка листов книги RUBEY Microsoft Office Excel 1 17.07.2008 10:57
Добавление строки в книги Леон Microsoft Office Excel 3 10.07.2008 08:17