用于窗体控件的代码不适用于ActiveX控件

第一次在StackOverflow的海报(但不是stackexchange)所以请让我知道,如果我可以澄清或进行任何格式更改。 谢谢。

尽我所能,我找不到这个问题的答案。 我怀疑这是由于对VBA的基础知识的缺乏。 我有VBA的知识,但很less理解。 这就是说,这是问题所在。

我已经build立了一个链接到macros的表单控件combobox。 我已经将input范围设置为不同表格中的超链接列表,并命名为“超链接”范围。 每个超链接到工作簿中的不同工作表。 我已经将单元格链接设置为与超链接相邻的空白链接,并将其命名为“Linked_Cell”。 下面是一张照片。

表单控制视图

macros代码如下

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 

这会自动将某人移到他们从下拉菜单中select该工作表时select的工作表。

我想使用一个Active Xcombobox,而不是一个表单控件的所有显而易见的原因(调整文本等),但是,我不能得到它的工作。

我已经将“ListFillRange”设置为“超链接”,并将单元格链接到“Linked_cell”并input相同的macros代码。 它看起来像这样:

活动Xcombobox的视图

当我从Active X Combo框中的下拉列表中select时,我收到运行时错误1004:“对象_worksheet”的“方法范围”失败。 我已经validation了我的命名范围是正确的,并且代码在链接到窗体控件的macros中时不会返回这样的错误。

任何帮助深表感谢! 谢谢!

更新:通过更新下面的代码来修复范围错误

 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语句的开始处收到types不匹配错误。 我没有看到错误,但仍然不知道为什么这种行为不会出现相同的macros代码链接到窗体控件。

PS对不起,我不打算把StackOverflow转到我的个人debugging团队,所以我的主要问题是“为什么macros和活动x代码之间的行为不同?

更新2:find一个修复程序。 正在使用错误的索引。 下面的解决scheme。 把它留在这里以防其他人发现它有用。

 Sub ComboBox1_Change() If ComboBox1.Value <> "" Then Sheets("SheetList").Range("Hyperlinks").Hyperlinks(ComboBox1.ListIndex + 1).Follow NewWindow:=False, AddHistory:=True End If End Sub 

find了一个修复。 正在使用错误的索引。 下面的解决scheme。 把它留在这里以防其他人发现它有用。

 Sub ComboBox1_Change() If ComboBox1.Value <> "" Then Sheets("SheetList").Range("Hyperlinks").Hyperlinks(ComboBox1.ListIndex +1).Follow NewWindow:=False, AddHistory:=True End If End Sub