Страницы: 1
RSS
Сопоставление ячеек и наименований листов в файле и создание Гиперссылки, сделать ячейку Гиперссылкой на соответствующий лист
 
Добрый день!
Есть макрос, который создает новые листы в книге и присваивает им имена по некоторому правилу. В другом листе (назовем его "Реестр") в столбце, например B, присвоенные имена добавляются по мере добавления новых листов.
Другими словами: есть листы ВВА, СВА, АВС и т.д. На отдельном листе "Реестр" в столбце В в ячейках прописаны эти же самые ВВА, СВА, АВС и т.д. Возможно ли в листе реестр в столбце В сделать ВВА, СВА, АВС и т.д гиперссылками на соответствующие листы? Прописывать руками не шибко рационально, т.к. новые листы с новыми именами постоянно создаются пользователем.
возможно, несколько кривовато объяснил, поэтому файл, на всякий случай, прилагаю
Изменено: ДмСмирнов - 06.03.2018 22:54:37
 
В "Приемы" заглядывали? Там есть статья на эту тему. См. способ №3.      
 
Спасибо, Юрий!
Получилось вывести список листов, исключая сам "Реестр":
Код
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

Но мой алгоритм предусматривает, что сначала создается лист с наименованием АВС, затем в столбце В в листе "Реестр" создается ячейке присваивается значение АВС.
Код
Sheets("Реестр").Select
    Rows("3:3").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "=R[1]C+1"
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "='АВС'!R[1]C[-1]"
Часть данных в лист "Реестр" подтягивается этим же макросом из листа АВС, а часть вводится вручную. После добавления нового листа запускаем макрос из "Приемов" и данные плывут. С теми, которые заполняются моим макросом проблем быть не должно, а вот данные, введенные руками, сдвинутся.
Возможно ли все-таки не выводить список гиперссылок всех нужных листов, а преобразовать содержимое ячейки в гиперссылку?
 
Код
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 - 05.03.2018 10:14:18
 
Anchoret, после выполнения макроса в столбце В значения ячеек определяются как гиперссылки, но когда нажимаю на нее появляется сообщение "Недопустимая ссылка"
 
ДмСмирнов, файл сохранили перед запуском как *xlsm? У меня все работает. Excel 2013.
Судя по описанию Вашего "алгоритма" дело в R1C1.
Изменено: Anchoret - 06.03.2018 01:42:39
 
Anchoret, конечно, как *xlsm сохранил. Он ведь с кучей макросов был.
Чудеса :))) Ваш  файл работает - мой нет :)))
Сначала думал, что дело все в апострофе перед данными в ячейке (кстати, так и не разобрался откуда он взялся и что значит). Апостроф убрал, но результат остался тем же: "Недопустимая ссылка".
файл прилагаю
Изменено: ДмСмирнов - 06.03.2018 22:55:20
 
Anchoret, уже разобрался!
все дело в "неправильных" символах "---" в названии листа. Убрал - все заработало:))
Спасибо!
 
Anchoret, Доброго дня Вам!
Опробовал Baш макрос. При наличии пробела в имени листа - так-же появляется сообщение "Недопустимая ссылка".
Этот вопрос разрешим? Или использовать вместо пробела иной символ?
Благодарю Вас.
 
Код
SubAddress:="'" & dt & "'!A1"
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков,Большое спасибо! Всё OK!
Страницы: 1
Наверх