Добрый день! Есть макрос, который создает новые листы в книге и присваивает им имена по некоторому правилу. В другом листе (назовем его "Реестр") в столбце, например B, присвоенные имена добавляются по мере добавления новых листов. Другими словами: есть листы ВВА, СВА, АВС и т.д. На отдельном листе "Реестр" в столбце В в ячейках прописаны эти же самые ВВА, СВА, АВС и т.д. Возможно ли в листе реестр в столбце В сделать ВВА, СВА, АВС и т.д гиперссылками на соответствующие листы? Прописывать руками не шибко рационально, т.к. новые листы с новыми именами постоянно создаются пользователем. возможно, несколько кривовато объяснил, поэтому файл, на всякий случай, прилагаю
Спасибо, Юрий! Получилось вывести список листов, исключая сам "Реестр":
Код
Dim sheet As Worksheet
Dim cell As Range
s = 1
With ActiveWorkbook
For Each sheet In ActiveWorkbook.Worksheets
If sheet.Name <> "Реестр" Then
Set cell = Worksheets("Реестр").Cells(s + 2, 2)
s = s + 1
.Worksheets("Реестр").Hyperlinks.Add anchor:=cell, Address:="", SubAddress:="'" & sheet.Name & "'" & "!A1"
cell.Formula = sheet.Name
End If
Next
End With
End Sub
Но мой алгоритм предусматривает, что сначала создается лист с наименованием АВС, затем в столбце В в листе "Реестр" создается ячейке присваивается значение АВС.
Часть данных в лист "Реестр" подтягивается этим же макросом из листа АВС, а часть вводится вручную. После добавления нового листа запускаем макрос из "Приемов" и данные плывут. С теми, которые заполняются моим макросом проблем быть не должно, а вот данные, введенные руками, сдвинутся. Возможно ли все-таки не выводить список гиперссылок всех нужных листов, а преобразовать содержимое ячейки в гиперссылку?
Sub HLinks()' с проверкой на существование листов
Dim bb As Range, iCell As Range, dt$, obj As Object, adr$
Set bb = Sheets("Реестр").Range("B2:B" & Sheets("Реестр").UsedRange.Rows.Count)
For Each iCell In bb
dt = iCell.Value: adr = iCell.Address
On Error Resume Next
Set obj = Sheets(dt)
If Err.Number > 0 Then
Err.Clear
Else
With Sheets("Реестр")
.hyperLinks.Add anchor:=.Range(adr), Address:="", SubAddress:=dt & "!A1", TextToDisplay:=dt
End With
End If
Next
End Sub
Anchoret, после выполнения макроса в столбце В значения ячеек определяются как гиперссылки, но когда нажимаю на нее появляется сообщение "Недопустимая ссылка"
Anchoret, конечно, как *xlsm сохранил. Он ведь с кучей макросов был. Чудеса )) Ваш файл работает - мой нет )) Сначала думал, что дело все в апострофе перед данными в ячейке (кстати, так и не разобрался откуда он взялся и что значит). Апостроф убрал, но результат остался тем же: "Недопустимая ссылка". файл прилагаю
Anchoret, Доброго дня Вам! Опробовал Baш макрос. При наличии пробела в имени листа - так-же появляется сообщение "Недопустимая ссылка". Этот вопрос разрешим? Или использовать вместо пробела иной символ? Благодарю Вас.