请参阅其他工作簿中的全局动态范围

时间:2017-03-14 10:18:55

标签: excel-vba named-ranges vba excel

我的问题

假设我在xxx(工作簿范围)中有一个命名区域(Workbook1说),它指的是动态确定的区域,如:

=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),1)

现在我想在VBA

中引用此范围
Sub t()
    Debug.Print Range("xxx").Address
End Sub

这就像一个魅力。但是,当我现在更改活动工作簿(例如通过添加新工作簿)时,上面的行将失败:

Sub t()
    Workbooks.Add
    Debug.Print Range("xxx").Address
End Sub

我的解决方法

我现在的解决方法是重新激活ThisWorkbook

Sub t()
    Workbooks.Add
    ThisWorkbook.Activate
    Debug.Print Range("xxx").Address
End Sub

我的问题

这是实现这一目标的唯一方法吗?我试图通过ThisWorkbook.Names("xxx").RefersToRange访问范围,但这也不起作用,因为范围是动态确定的。不幸的是,没有像ThisWorkbook.Range("xxx")那样的东西。

所以简而言之:无论目前的焦点如何,我如何引用全局命名的动态范围?是将范围从Workbook更改为Worksheet的唯一方法吗?

1 个答案:

答案 0 :(得分:1)

即使xxx在工作簿范围内,您也可以在工作表范围内访问它。

Debug.Print ThisWorkbook.ActiveSheet.Range("xxx").Address

这仅适用于偏移量指向的工作表(此处为sheet1)。

如果你只是用它来查找A列的使用范围,那么我建议只用VBA轻松解决这个问题:

Debug.Print Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Address