#vba #excel
#vba #excel
Вопрос:
Хорошо, значит, я совершенно новичок в этом деле. Новая роль на работе. Я получил этот запрос Excel:
- Двойной щелчок по любой ячейке на листе создает новый лист.
- Исходная ячейка, на которую дважды щелкнули, теперь превращается в гиперссылку, ссылающуюся на недавно созданный лист.
- Функция двойного щелчка для этой ячейки, которая изначально была двойным щелчком, удалена.
Я, честно говоря, застрял. Раньше я не программировал с использованием 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» «, так что исходный текст в ячейке остается!