Использование VBA: двойной щелчок по ячейке создает новый лист, ячейка также имеет гиперссылку на новый лист

#vba #excel

#vba #excel

Вопрос:

Хорошо, значит, я совершенно новичок в этом деле. Новая роль на работе. Я получил этот запрос Excel:

  1. Двойной щелчок по любой ячейке на листе создает новый лист.
  2. Исходная ячейка, на которую дважды щелкнули, теперь превращается в гиперссылку, ссылающуюся на недавно созданный лист.
  3. Функция двойного щелчка для этой ячейки, которая изначально была двойным щелчком, удалена.

Я, честно говоря, застрял. Раньше я не программировал с использованием VBA. Я выяснил, как создать новый лист при двойном щелчке, и я выяснил, как создать гиперссылку. Но я не могу понять, как создать гиперссылку на вновь созданный лист и удалить функцию двойного щелчка из этой исходной ячейки!

Вот все, что у меня есть…

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     Sheets.Add
End Sub
 

Кроме того, простите меня, если я нарушаю какие-либо правила здесь, это моя первая публикация здесь. Большое вам спасибо за вашу помощь!

Комментарии:

1. Я дам 1 за хороший первый вопрос. Вы показали, что вы пробовали / что у вас есть, объяснили проблему и каков ожидаемый результат. Гиперссылки иногда могут быть сложными. Есть много первых вопросов с гораздо меньшим количеством или просто просьбой «сделай это для меня».

2. Вау, спасибо! Я с нетерпением жду возможности узнать больше и стать лучше.

Ответ №1:

Вы на правильном пути, просто нужно еще несколько компонентов. Ключевым моментом является объявление и использование объектных переменных ( ws в данном случае).

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim ws As Worksheet

    ' Prevent screen flicker
    Application.ScreenUpdating = False

    ' Add worksheet
    Set ws = Me.Parent.Worksheets.Add

    ' Add Hyperlink
    Target.Hyperlinks.Add Anchor:=Target, Address:="", SubAddress:=ws.Cells(1, 1).Address(True, True, , True), TextToDisplay:=ws.Name amp; "!A1"

    ' Restore original sheet as active
    Me.Activate

    ' Disable original Doubleclick action
    Cancel = True

    ' Restore screen updating
    Application.ScreenUpdating = True
End Sub
 

Комментарии:

1. Отличным ресурсом для вещей Excel (помимо SO) является cPearson.Com

2. Вау, это один огромный сайт — я добавлю его в закладки и буду ссылаться на него, прежде чем снова опубликовать :). Спасибо за решение, я скоро его протестирую!

3. woops, извините за дополнительный комментарий. Это сработало! Я только удалил: «, TextToDisplay:=ws.Name amp; «! A1» «, так что исходный текст в ячейке остается!