如何将字符串变量作为参数传入Names对象?VBA报错求解
解决VBA中通过名称获取Range区域的错误问题
出现“应用程序定义或对象定义错误”通常有以下几种原因:
- 目标命名区域
xyzabcd不存在于当前活动工作簿中 - 命名区域的引用无效(比如指向已删除的工作表、关闭的外部工作簿,或者引用格式错误)
- 当前活动工作簿并非包含该命名区域的工作簿
以下是更稳健的实现代码,包含错误检查,确保能正确获取目标区域:
Dim Temp As String, Temp1 As String, Temp3 As String Dim Temp2 As Range Dim targetName As Name Temp = "abcd" Temp1 = "xyz" Temp3 = Temp1 & Temp ' 拼接得到目标区域名称"xyzabcd" ' 先检查目标命名区域是否存在 On Error Resume Next Set targetName = ActiveWorkbook.Names(Temp3) On Error GoTo 0 If Not targetName Is Nothing Then ' 尝试获取对应的Range对象 On Error Resume Next Set Temp2 = targetName.RefersToRange On Error GoTo 0 If Not Temp2 Is Nothing Then ' 成功获取区域,可在此添加后续操作 Debug.Print "成功获取区域:" & Temp2.Address(External:=True) Else MsgBox "命名区域" & Temp3 & "无法转换为有效Range(可能引用了关闭的外部工作簿或无效地址)" End If Else MsgBox "当前活动工作簿中不存在名为" & Temp3 & "的命名区域" End If
额外说明:
- 如果
xyzabcd是工作表级命名区域(仅属于特定工作表),可以直接通过对应工作表的Range对象获取,比如:Set Temp2 = ThisWorkbook.Sheets("目标工作表名").Range(Temp3) - 可通过Excel的「公式」选项卡→「名称管理器」检查目标区域的引用内容是否有效
内容的提问来源于stack exchange,提问作者HD0902
相关产品推荐
相关产品推荐

