如何在Excel VBA的Names.Add方法中使用结构化引用?
解决Excel VBA添加结构化引用名称的问题
你遇到的问题是因为VBA中直接使用=TestTable[One]作为引用时,Excel无法自动识别工作表上下文,而手动在名称管理器操作时Excel会自动补全这个上下文。有两种可靠的解决方法:
方法一:直接引用表格列的Range对象(推荐)
这种方式不需要手动拼接引用字符串,由VBA自动处理引用路径,更不易出错:
Sub Test() Dim targetTable As ListObject ' 指定表格所在的工作表,这里假设表格在活动工作表,若不在则替换为具体工作表名称,比如Sheets("Sheet1") Set targetTable = ActiveWorkbook.ActiveSheet.ListObjects("TestTable") ' 添加工作簿级名称,引用表格的"One"列 ActiveWorkbook.Names.Add Name:="TestOne", RefersTo:=targetTable.ListColumns("One").Range End Sub
方法二:补全工作表上下文的结构化引用字符串
如果坚持使用结构化引用的字符串写法,需要明确指定表格所在的工作表,让Excel能正确解析引用:
Sub Test() Dim ws As Worksheet ' 指定表格所在的工作表 Set ws = ActiveWorkbook.ActiveSheet ' 拼接包含工作表的结构化引用字符串 ActiveWorkbook.Names.Add Name:="TestOne", RefersTo:="='" & ws.Name & "'!TestTable[One]" End Sub
两种方法都能成功创建工作簿级名称TestOne,在单元格输入=TestOne后会正常溢出显示表格One列的内容。
内容的提问来源于stack exchange,提问作者Rich Holton
相关产品推荐
相关产品推荐

