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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.11.2008, 19:09   #1
owl-ka
Пользователь
 
Регистрация: 17.11.2008
Сообщений: 18
Стрелка как листу дать имя

Люди, помогите пожалуйста и если можно, то срочно (по работе горит)! Я в макросах - полный ноль. а без них задачу не решить.
Есть некая книга с массой листов. На каждом листе есть одинаковая шапка для таблицы. В этой шапке каждой ячейке (например В2 - название, А2 - имя, J2 - имя и т.д.) соответствует свое содержимое. Помогите сделать так, чтобы имя листа соответствовало содержимому одной ячейке на листе (например ячейке А2, т.е. её содержимому) и еще, при добавлении листов, в новом листе это работало тоже. Просто когда листов немного, это можно сделать вручную, а вот для огромного количества..... проблематично.
Оглавление для книги уже есть. Создается при помощи макроса. Если можно и подскажите как это все связать.
owl-ka вне форума
Старый 25.11.2008, 19:14   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub RenameSheets()
    On Error Resume Next ' это на случай, если на нескольких листах
    ' в ячейках А2 будет одно и то же значение
    ' а двух листов с одинаковыми именами быть не может
    
    
    'Dim sh As Worksheet
    For Each sh In ThisWorkbook.Worksheets
        sh.Name = sh.[a2]
    Next
End Sub
Цитата:
при добавлении листов, в новом листе это работало тоже
При добавлении листа он по умолчанию создаётся пустым, так что сразу присвоить ему нужное имя не получится.
Придется после заполнения нового листа снова запускать макрос.

Последний раз редактировалось EducatedFool; 25.11.2008 в 19:17.
EducatedFool вне форума
Старый 25.11.2008, 19:36   #3
owl-ka
Пользователь
 
Регистрация: 17.11.2008
Сообщений: 18
По умолчанию

EducatedFool!
подскажите еще - это записывать как модуль в книгу? Если да, тогда напрашивается еще вопрос. одним модулем в книге есть оглавление - вот такой макрос
Sub SheetList()
Dim sheet As Worksheet
Dim cell As Range

With ActiveWorkbook
For Each sheet In ActiveWorkbook.Worksheets
Set cell = Worksheets(1).Cells(sheet.Index, 1)
.Worksheets(1).Hyperlinks.Add anchor:=cell, Address:="", _
SubAddress:="'" & sheet.Name & "'" & "!A1"
cell.Formula = sheet.Name
Next
End With
End Sub
, как их совместить или создать различные модули? и еще забыла, нужно чтобы листы были по порядку.
owl-ka вне форума
Старый 25.11.2008, 19:47   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Разные модули создавать ни к чему.

Можно поместить эти макросы один за другим, например, так:
Код:
Sub RenameSheets()
    On Error Resume Next: For Each sh In ThisWorkbook.Worksheets: sh.Name = sh.[a2]: Next
End Sub

Sub Оглавление()
    Dim sheet As Worksheet, cell As Range
    With ThisWorkbook
        For Each sheet In .Worksheets
            Set cell = .Worksheets(1).Cells(sheet.Index, 1)
            .Worksheets(1).Hyperlinks.Add cell, "", "'" & sheet.Name & "'" & "!A1", , sheet.Name
        Next
    End With
End Sub
Или объединить их в один:
Код:
Sub Оглавление_и_переименование_листов()
    On Error Resume Next
    Dim sheet As Worksheet, cell As Range
    With ThisWorkbook
        For Each sheet In .Worksheets
            sheet.Name = sheet.[a2]
            Set cell = .Worksheets(1).Cells(sheet.Index, 1)
            .Worksheets(1).Hyperlinks.Add cell, "", "'" & sheet.Name & "'" & "!A1", , sheet.Name
        Next
    End With
End Sub
EducatedFool вне форума
Старый 25.11.2008, 19:56   #5
owl-ka
Пользователь
 
Регистрация: 17.11.2008
Сообщений: 18
По умолчанию

А сортировать по порядку 1, 2, 3, и т.д. они смогут?
И пока последний вопрос. У меня на работе стоит 2 машины, на одной офис 2003, на другой 2007. Этот макрос сможет работать и в одном excel и в другом?
Я решила серьезно заняться изучением этого дела как VBA. В интернете нашла достаточно много литературы, но столкнулась с тем, что макросы написаные для одной системы, не всегда подходят к другой. Иногда бывают конфликты между 97, 2003 и 2007 офисом.(я сама с таким столкнулась). Подскажите(если можно со ссылкой) где расписано даже для "полных нулей в VBA" как написать правильный макрос или исправить уже готовый, если он не работает в этой версии.
owl-ka вне форума
Старый 25.11.2008, 20:03   #6
owl-ka
Пользователь
 
Регистрация: 17.11.2008
Сообщений: 18
По умолчанию

Я то нашла макрос для сортировки листов:
Sub SortSheets()
Dim I As Integer, J As Integer

For I = 1 To Sheets.Count - 1
For J = I + 1 To Sheets.Count
If UCase(Sheets(I).Name) > UCase(Sheets(J).Name) Then
Sheets(J).Move Before:=Sheets(I)
End If
Next J
Next I
End Sub
Из всего выше изложенного его нужно будет поставить в тот же самый модуль после предыдущего составного макроса.?
owl-ka вне форума
Старый 25.11.2008, 20:09   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
А сортировать по порядку 1, 2, 3, и т.д. они смогут?
Что именно надо сортировать? Листы в книге, или записи в оглавлении?

Цитата:
У меня на работе стоит 2 машины, на одной офис 2003, на другой 2007. Этот макрос сможет работать и в одном excel и в другом?
Да, такие простые макросы должны работать в любой версии Office.

Цитата:
столкнулась с тем, что макросы написаные для одной системы, не всегда подходят к другой
Да, бывает такое, но не так часто, чтобы изучение VBA начинать именно с этой темы.

Цитата:
как написать правильный макрос или исправить уже готовый, если он не работает в этой версии
Исправить макрос, работающий в 2003-й версии, но отказывающийся работать в 2007-й, порой бывает сложно даже для профессионалов...

Абсолютное большинство макросов, которые Вам понадобятся для работы, будут отлично работать во всех версиях Excel

Последний раз редактировалось EducatedFool; 25.11.2008 в 21:29.
EducatedFool вне форума
Старый 25.11.2008, 21:05   #8
owl-ka
Пользователь
 
Регистрация: 17.11.2008
Сообщений: 18
По умолчанию

В данному случае каждому ярлыку листа будет присвоено имя, обозначающее номер или слово. И сортировать естественно придется листы книги, а оглавление само подстроится затем под нумерацию или список
owl-ka вне форума
Старый 25.11.2008, 21:29   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Из всего выше изложенного его нужно будет поставить в тот же самый модуль после предыдущего составного макроса.?
Абсолютно не важно, в тот же модуль, или в какой-нибудь другой.
Главное, в каком порядке все эти макросы будут запускаться.

Напишите макрос
Код:
Sub ОбработкаФайла()
    SortSheets
    Оглавление_и_переименование_листов
End Sub
который будет запускать другие в определённом порядке.

Макрос сортировки листов лучше записать так:

Sub SortSheets()
Dim I As Integer, J As Integer
For I = 1 To Worksheets.Count - 1
For J = I + 1 To Worksheets.Count
If UCase(Worksheets(I).Name) > UCase(Worksheets(J).Name) Then Worksheets(J).Move Before:=Worksheets(I)
Next J
Next I
End Sub[/CODE]

Последний раз редактировалось EducatedFool; 25.11.2008 в 22:29.
EducatedFool вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как присвоить ячейке имя? Maxx Microsoft Office Excel 2 01.11.2008 11:30
Как получить имя файла Crazyman Работа с сетью в Delphi 4 11.07.2008 00:47
Как не дать разъединиться с Инетом Crazyman Работа с сетью в Delphi 2 04.03.2008 00:12
Как купить доменное имя ? mad-explorer Свободное общение 6 07.11.2007 19:33
TWebBrowser-как перехватить команду скрипта для закрытия окна и не дать ему закрыться Вовик Компоненты Delphi 5 03.10.2007 12:17