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

时间:2016-02-08 16:11:38

标签: arrays excel vba range named

我有一份月度销售数据表 - FreqData1。每列代表一个月,编号为1到12.用户从下拉列表中选择其中一个数字。

我有代码来查找列号,我尝试将该列中的数据分配给一个数组,这样我就可以使用它将其复制到另一个电子表格但是我的基本VBA知识,尽管我有很多搜索无法找到如何执行此操作的代码或其他方法来执行此操作。

任何人都可以帮忙吗

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

非常感谢提前

1 个答案:

答案 0 :(得分:3)

我认为这是你的答案:这就是你使用范围的方式。

删除CharArray = ...行并替换为:

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

这将选择“FreqData”范围内的左上角单元格(第1行,第1列),因此将选择单元格A10

最后的错误。点:Avoid using .Select/.Activate。您可以激活一个课程表,以便您可以关注宏,但在将变量设置为范围/单元格值等时,最好确定您要引用的工作表。

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)),即使该范围内没有第二列,它也会扩展它。我认为这会引发错误,但不是。请注意。