Код, который работает для элемента управления form, не работает для элемента управления ActiveX

#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

Когда я выбираю из выпадающего списка в поле со списком 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