如何在具有多个区域的Excel-VBA中访问命名范围?

时间:2013-01-11 14:06:09

标签: excel-vba vba excel

所有工作都适用于单区域范围: 选择单元格A1和B1,并为其命名" foo"。

?ThisWorkbook.Names.Item("foo").RefersTo
 =Tabelle1!$A$1:$B$1
?ThisWorkbook.Names.Item("foo").RefersToRange.Address
 $A$1:$B$1

但是,双区域范围将失败(Excel 2010): 单击按住Ctrl键单元格A2和B2,并将其命名为" bar"。

 ?ThisWorkbook.Names.Item("bar").RefersTo
  =Tabelle1!$A$2,Tabelle1!$B$2
 ?ThisWorkbook.Names.Item("bar").RefersToRange.Address
  -> Run-time error '1004'

为什么我们无法获得" bar" -name所指的范围?

是否有解决方法未使用 sheet.Range("bar"),因为我不知道哪个工作表包含该名称?

2 个答案:

答案 0 :(得分:1)

您可以尝试全局Range,而不是sheet.Range

? Range(ThisWorkbook.Names("bar").RefersTo).Address

为了避免可能的跨工作簿陷阱,您可以使用ConvertFormula将工作簿名称添加到范围:

? ThisWorkbook.Names("bar").RefersTo
  =Sheet1!$A$2,Sheet1!$B$2

? Application.ConvertFormula(ThisWorkbook.Names("bar").RefersTo, xlA1, xlA1)
  =[Book1]Sheet1!$A$2,[Book1]Sheet1!$B$2

? Application.Range(Application.ConvertFormula(ThisWorkbook.Names("bar").RefersTo, xlA1, xlA1)).Address
  =$A$2,$B$2

答案 1 :(得分:0)

这里的一个问题是,RefersToRange对于由以下内容定义的多区域命名范围失败:

=Sheet1!$B$2 + Sheet1!$D$4

但它适用于:

=Sheet1!$B$2 , Sheet1!$D$4

差异为,+