【问题标题】:Code that works for a form control doesn't work for ActiveX control适用于表单控件的代码不适用于 ActiveX 控件
【发布时间】:2017-02-15 10:57:14
【问题描述】:

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

尽我所能,我找不到这个问题的答案。我怀疑这是由于对 VBA 的基础知识缺乏了解。我对VBA有所了解,但了解甚少。话虽如此,这就是问题所在。

我已经设置了一个链接到宏的表单控件组合框。我已将输入范围设置为不同工作表中的超链接列表,并将范围命名为“超链接”。每个超链接都指向工作簿中的不同工作表。我已将单元格链接设置为与超链接相邻的空白销售,并将其命名为“Linked_Cell”。如下图。

Form Control View

宏代码如下

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”设置为“Hyperlinks”并将链接单元格设置为“Linked_cell”并输入了相同的宏代码。它看起来像这样:

View of Active X Combo Box

当我从 Active X 组合框中的下拉列表中选择时,我收到运行时错误 1004:“对象 '_worksheet' 的方法 'range' 失败。”我已验证我的命名范围是正确的,并且代码在链接到表单控件的宏中时不会返回此类错误。

非常感谢任何帮助!谢谢!

更新:通过将代码更新为以下内容来修复 Range 错误

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 语句的开头收到类型不匹配错误。我没有看到错误并且仍然不知道为什么对于链接到表单控件的相同宏代码不会出现此行为。

附:抱歉,我并不是要将 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 

【问题讨论】:

  • 在冒犯的If之前,放上Debug.Print HyperLink_Index。我怀疑这不是你想的那样。也许您没有正确的命名范围。也许它在另一张纸上?
  • 谢谢@JohnColeman。你引导我解决问题!我已经更新了我的问题并发布了它。我的代码比它需要的复杂得多,而且我使用了错误的索引(正如你所怀疑的那样)。

标签: vba excel hyperlink macros


【解决方案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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-09
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多