Excel VBA引用外部网站触发运行时错误‘9’:下标越界
问题分析与解决方案
错误根源
点击外部网站链接时,Target.SubAddress属性为空字符串。此时执行Split(Target.SubAddress, "!")会生成一个空数组,访问arr(0)必然触发Run-Time error '9': Subscript out of range。内部链接的SubAddress包含工作表名称(格式为工作表名!单元格地址),所以Split操作能正常获取到工作表名称,不会报错。
修改后的Dashboard工作表代码
Option Explicit Dim bFlag As Boolean Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) Dim SH As Worksheet Dim arr As Variant If bFlag = True Then Exit Sub ' 仅处理内部工作表链接,外部链接直接跳过后续逻辑 If Target.SubAddress <> "" Then arr = Split(Target.SubAddress, "!") ' 确保Split后数组有有效元素(防止特殊格式的内部链接) If UBound(arr) >= 0 Then On Error Resume Next ' 容错:防止工作表名称不存在的情况 Set SH = ThisWorkbook.Sheets(arr(0)) On Error GoTo 0 If Not SH Is Nothing Then SH.Visible = xlSheetVisible End If End If End If bFlag = True Target.Follow bFlag = False End Sub
代码说明
- 外部链接判断:通过
Target.SubAddress <> ""区分内部/外部链接,外部链接直接跳过工作表显示逻辑,避免无效的Split操作。 - 数组边界检查:添加
UBound(arr) >= 0确保Split返回的数组有有效元素,规避极端格式下的下标错误。 - 容错处理:加入错误捕获和工作表存在性判断,防止因工作表名称错误引发额外异常。
修改后,点击外部链接会直接打开网页且无报错,内部链接的原有功能保持正常。
内容的提问来源于stack exchange,提问作者Curtis Hayworth
相关产品推荐
相关产品推荐

