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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2011, 11:30   #1
Pavarotti
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 48
По умолчанию Как переименовать лист макросом?

Здравствуйте!

Подскажите пожалуйста как переименовать лист с помощью макроса.
В книге имя у каждого листа представляет собой "Week(1)", где меняется только цифовая часть, т.е листы выглядят как Week(2), Week(3) и т.д.
Попробовал след. код, но не срабатывает. Не могу правильно описать, чтобы макрос искал в формулах текущего листа имя пред-предыдущего листа и менял его на предыдущий.

Код:
Private Sub CommandButton1_Click()
 
    Cells.Replace What:="Week("&MID(CELL("filename",A1))-1, Replacement:="Week("&MID(CELL("filename",A1))"
 
 
End Sub
Подскажите, что я делаю неправильно.

Последний раз редактировалось Pavarotti; 23.02.2011 в 11:31. Причина: ошибся
Pavarotti вне форума Ответить с цитированием
Старый 23.02.2011, 12:54   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Код:
Dim sOldName As String, sNewName As String
sOldName = ActiveSheet.Previous.Previous.Name
sNewName = "Week(" & Val(Mid(sOldName, InStr(sOldName, "(") + 1)) + 1 & ")"
ActiveSheet.UsedRange.Replace sOldName, sNewName, lookat:=xlPart
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 23.02.2011, 13:57   #3
Pavarotti
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 48
По умолчанию

Не хочет работать. Ругается на строчке
sOldName = ActiveSheet.Previous.Previous.Name
Pavarotti вне форума Ответить с цитированием
Старый 23.02.2011, 14:18   #4
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Да? Ну так может нет этого предпредыдущего листа? Сколько листов-то в книге? Какой активный? Сколько листов перед активным?
И еще: когда пишите, что ругается - не мешало бы писать текст ошибки. Так быстрее получите грамотный ответ вместо догадок.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 23.02.2011, 14:29   #5
Pavarotti
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 48
По умолчанию

Аааа! Всё въехал.
Предложенный метод отлично работает, когда листы упорядоченны слева-направо по возрастанию порядкового номера. А если же они расположенны наоборот?
Pavarotti вне форума Ответить с цитированием
Старый 23.02.2011, 14:37   #6
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от Pavarotti Посмотреть сообщение
Аааа! Всё въехал.
Предложенный метод отлично работает, когда листы упорядоченны слева-направо по возрастанию порядкового номера. А если же они расположенны наоборот?
Что значит наоборот? Прочитайте свое первое сообщение:
Цитата:
Сообщение от Pavarotti
чтобы макрос искал в формулах текущего листа имя пред-предыдущего листа и менял его на предыдущий
Ключевые слова: пред-предыдущий, предыдущий

А если нужны следующие, то используйте вместо Previous - Next.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 23.02.2011, 14:45   #7
Pavarotti
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 48
По умолчанию

Хотел сказать, что "пред-предыдущий" имеется ввиду не то какой лист где стоит и когда был создан, а когда порядок листов определяется их порядковыми номерами, т.е. Week(1), Week(2), Week(3) могут потенциально стоять где и как угодно в книге, а excel понимал и принимал что Week(1) это лист предшествует Week(2), Week(2) предшествует Week'y(3) и т.д.
Если такой достаточно сложно реализовать. То может быть реалищовать тот же способ что вы подскзали, только наоборот.
Pavarotti вне форума Ответить с цитированием
Старый 23.02.2011, 14:57   #8
Pavarotti
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 48
По умолчанию

Ну в любом случае спасибо вам большое!
Вы очень мне помогли. Я просто немного изменю свой проект, чтобы успешно внедрить ваш способ.
Еще раз большое спасибо за помощь!
Pavarotti вне форума Ответить с цитированием
Старый 23.02.2011, 15:15   #9
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Ну вот теперь все встало на свои места. Тестируйте.
Код:
    Dim wsSh As Worksheet, sOldName As String, sNewName As String
    Dim lOne As Long, lTwo As Long

    For Each wsSh In Sheets
        If InStr(wsSh.Name, "Week") Then
            sOldName = wsSh.Name
            lOne = Val(Mid(sOldName, InStr(sOldName, "(") + 1))
            If lTwo < lOne Then lTwo = lOne
        End If
    Next wsSh
    If lTwo > 1 Then
        lOne = lTwo - 1
    Else
        MsgBox "Нет листа для переименования": Exit Sub
    End If
    sOldName = "Week(" & lOne & ")"
    sNewName = "Week(" & lTwo & ")"
    ActiveSheet.UsedRange.Replace sOldName, sNewName, lookat:=xlPart
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 24.02.2011, 07:50   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Возможно, что Ваш вопрос связан с этой темой? Посмотрите.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TP. Как переименовать файл? TwiX Помощь студентам 2 14.12.2009 18:48
Как правильно переименовать окно? Sandyron Общие вопросы Delphi 7 16.11.2009 22:34
Как в 2003 Екселе переименовать столбцы? ЕленаС Microsoft Office Excel 2 10.02.2009 19:09
Как у Грида переименовать столбцы? Detka Помощь студентам 2 07.02.2009 22:28
как переименовать samosval Общие вопросы .NET 1 19.12.2007 21:40