Excel 2007 VBA将命名范围的一部分分配给数组

我有一个每月销售数字表格 – FreqData1。 每列表示一个月份,编号为1到12.用户从下拉列表中select其中一个数字。

我有代码find列号,我试图将该列中的数据分配给一个数组,所以我可以用它复制到不同的电子表格,但与我的基本VBA知识,尽pipe大量的search,我一直无法find如何做到这一点或不同的方法来执行此代码。

任何人都可以帮助请

Sub AnnualFreqMacro() Dim TPNoInt As Long, BranchNoInt As Long, ColNo As Long Dim FreqArray() Worksheets("Freq data").Activate TPNoInt = Range("B42").Value BranchNoInt = Range("B41").Value ColNo = Application.Match(TPNoInt, Range("TPBr1"), 0) CharaArray = Range("FreqData1").Cells (1, ColNo), Cells(16, ColNo)) End Sub 

提前谢谢了

我想这是你的答案:这就是你如何使用范围。

删除你的CharArray = ...行,并replace为:

 With Range("FreqData1") CharaArray = .Range(.Cells(1, ColNo), .Cells(16, ColNo)) End With 

问题是你如何设置范围, Range().Cells(), Cells()不是上下文,你想要的东西更像是Range(Cells(),Cells())

假设“FreqData1”是范围A10:A20 。 如果你使用

 With Range("FreqData1") .Cells(1,1).Select End With 

这将select范围“FreqData”中最左上angular的单元格(第1行,第1列),因此将select单元格A10

最后的混杂。 点: 避免使用 。select/ 。 .Activate 。 你可以激活一张课程表,这样你就可以跟随你的macros,但是当把variables设置为范围/单元格值时,最好是限定你所指的是哪一个表格。

 Sub AnnualFreqMacro() Dim TPNoInt As Long, BranchNoInt As Long, ColNo As Long Dim FreqArray() Dim freqWS As Worksheet Set freqWS = Worksheets("Freq data") ' Worksheets("Freq data").Activate ' removed this, since we have a variable for it now. TPNoInt = freqWS.Range("B42").Value ' see how I added the worksheet that we want to get B42's value from? BranchNoInt = freqWS.Range("B41").Value ColNo = Application.Match(TPNoInt, Range("TPBr1"), 0) With freqWS.Range("FreqData1") ' I'm assuming "FreqData1" is on this worksheet CharaArray = .Range(.Cells(1, ColNo), .Cells(16, ColNo)) End With End Sub 

我不积极,如果你必须限定一个命名的范围的工作表,因为它是一个命名的范围,但我补充说,只是为了安全。

Edit2:嗯,奇怪的是,如果你命名的范围“myRange”是A1:A10 ,你仍然可以做myRange.Range(myRange.cells(1,1),myRange.cells(1,2)) ,即使没有在范围的第二列,它只是扩大它。 我以为会抛出一个错误,但不是。 只要注意。