#vba #excel #hyperlink #macros
#vba #excel #гиперссылка #макросы
Вопрос:
Первый постер в StackOverflow (но не stackexchange), поэтому, пожалуйста, дайте мне знать, если я могу уточнить или внести какие-либо изменения в форматирование. Спасибо.
Как я ни пытаюсь, я не могу найти ответ на этот вопрос. Я подозреваю, что это связано с недостаточным пониманием основ VBA. Я знаю VBA, но мало понимаю. Как говорится, вот в чем проблема.
Я настроил поле со списком элемента управления формой, связанное с макрокомандой. Я установил диапазон ввода в список гиперссылок на другом листе и назвал диапазон «Гиперссылки». Каждая гиперссылка ведет на другой лист в рабочей книге. Я установил ссылку на ячейку в пустую ячейку рядом с гиперссылками и назвал ее «Linked_Cell». Изображение ниже.
Вид элемента управления формой
Код макроса выглядит следующим образом
Sub DropDown10_Change()
HyperLink_Index = Range("Linked_cell")
If Range("HyperLinks").Offset(HyperLink_Index - 1, 0).Hyperlinks(1).Name <> "" Then
Range("HyperLinks").Offset(HyperLink_Index - 1, 0).Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
End If
End Sub
Это автоматически перемещает пользователя на лист, который он выбирает, когда он выбирает этот лист из выпадающего меню.
Я хотел бы использовать поле со списком Active X вместо элемента управления формой по всем очевидным причинам (изменение размера текста и т. Д.) Однако я не могу заставить его работать.
Я установил для «ListFillRange» значение «Гиперссылки», а для связанной ячейки — «Linked_cell» и ввел тот же код макроса. Это выглядит так:
Когда я выбираю из выпадающего списка в поле со списком Active X, я получаю ошибку 1004 во время выполнения: «Ошибка метода ‘range’ объекта’_worksheet'». Я проверил, что мои именованные диапазоны верны, и код не возвращает такой ошибки, когда он находится в макросе, связанном с элементом управления form.
Любая помощь приветствуется! Спасибо!
ОБНОВЛЕНИЕ: исправлена ошибка диапазона путем обновления кода до следующего
Sub ComboBox1_Change()
Dim HyperLink_Index As Range
Set HyperLink_Index = Sheets("SheetList").Range("Linked_Cell")
If Sheets("SheetList").Range("HyperLinks").Offset(HyperLink_Index - 1, 0).Hyperlinks(1).Name <> "" Then
Sheets("SheetList").Range("HyperLinks").Offset(HyperLink_Index - 1, 0).Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
End If
End Sub
Теперь я получаю ошибку несоответствия типов в начале инструкции IF. Я не вижу ошибки и до сих пор понятия не имею, почему это поведение не отображается для идентичного кода макроса, связанного с элементом управления form.
PS Извините, я не собираюсь передавать StackOverflow в мою личную команду отладки, поэтому главный вопрос, который у меня есть: «Почему поведение отличается между макросом и активным x-кодом?»
ОБНОВЛЕНИЕ 2: найдено исправление. Использовался неправильный индекс. Исправление приведено ниже. Оставляем его здесь на случай, если кто-то другой найдет его полезным.
Sub ComboBox1_Change()
If ComboBox1.Value <> "" Then
Sheets("SheetList").Range("Hyperlinks").Hyperlinks(ComboBox1.ListIndex 1).Follow NewWindow:=False, AddHistory:=True
End If
End Sub
Комментарии:
1. Перед нарушением
If
поместите строкуDebug.Print HyperLink_Index
. Я подозреваю, что это не то, что вы думаете. Возможно, у вас нет правильного именованного диапазона. Может быть, он находится на другом листе?2. Спасибо @JohnColeman. Вы привели меня к исправлению! Я обновил свой вопрос и опубликовал его. Мой код был намного сложнее, чем нужно, и я использовал неправильный индекс (как вы и подозревали).
Ответ №1:
Найдено исправление. Использовался неправильный индекс. Исправление приведено ниже. Оставляем его здесь на случай, если кто-то другой найдет его полезным.
Sub ComboBox1_Change()
If ComboBox1.Value <> "" Then
Sheets("SheetList").Range("Hyperlinks").Hyperlinks(ComboBox1.ListIndex 1).Follow NewWindow:=False, AddHistory:=True
End If
End Sub