在VBA中访问dynamic命名范围

在Excel中,我有一个如下的列,作为工作簿模板的一部分:

Date Asset Return 1/3/2005 0.003582399 1/4/2005 -0.01908258 1/5/2005 0.002080625 1/6/2005 0.005699497 1/7/2005 -0.008040505 1/10/2005 -0.00339116 1/11/2005 -0.009715187 1/12/2005 0.002371855 1/13/2005 -0.00580783 1/14/2005 0.001058481 1/18/2005 0.015483842 1/19/2005 -0.014690715 1/20/2005 -0.015714799 1/21/2005 -0.010796326 

我正在使用Excel作为用户界面。 用户将数据放入Excel中,然后从另一个程序(Matlab)读入数据,然后进行计算。

为此,我使用VBA命令将其发送到Matlab,并直接或通过命名范围来引用该范围:

 MLPutMatrix "VARIABLE_NAME", Range("B8:B2954") 

要么

 MLPutMatrix "VARIABLE_NAME", Range("NamedRange") 

我的问题是,我不知道什么范围的大小将提前,因为行数将有所不同,取决于用户放入Ex​​cel范围内的数据。

我试着用这个公式创build一个引用最后一个非空行的命名区域:

 Sheet1!$B$8:INDEX(Sheet1!$B:$B,COUNTA(Sheet1!$B:$B)+8) 

但是,明显命名的使用公式定义的范围不会显示在名称框中,也不能在VBA脚本中使用,所以这不起作用。 我需要手动创build一个名称,使其显示在名称框中,并使用VBA访问它,但是当然,如​​果我不知道我的范围维度,我不能这样做。

所以我的问题是:我需要find一种方法来引用一个dynamic范围,无论是按名称或大小,然后能够在VBA中引用它,以便我可以将它发送到Matlab使用“MLPutMatrix “命令。

 With Worksheets("mydata") '<--| change "mydata" with your actual sheet name MLPutMatrix "VARIABLE_NAME", .Range("B2", .Cells(.Rows.Count, "B").End(xlUp)) '<--| change "B2" to your actual first cell and "B" to your actual column data index End With 

公式定义的命名范围不能在VBA中使用。 如果您遇到问题,那么您的配方可能会有问题。

引用范围的典型方法是:

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