VBA:变量名称数组

时间:2015-02-06 18:07:12

标签: arrays vba excel-vba excel

我有一个宏,它根据一组规则将一行(一个)从一个“主”工作表复制到几个其他工作表,但并不是每一行都会复制到每个工作表。所以我有一组变量作为不同工作表上每一行的“计数器”,这样我就可以跟踪当前行,而不会覆盖任何给定工作表上的任何行。这导致了许多丑陋的代码,类似于以下内容。

.Rows(material.Row).Copy Destination:=Worksheets("QM").Range("A" & QMCounter)

我想把它变成一个单独的子句,我可以调用它从主工作表,目标工作表和工作表的计数器变量传递行号。

我想要做的是创建一个不同的计数器变量名称的数组,以便我可以做类似于以下的事情

For i = 0 to Ubound(VarNameArray)

    Counter = VarNameArray(i)        

    Call CopyRow(Material, DestWorksheet, Counter)

Next i

我的问题是将变量名的字符串值转换为实际变量名,以便VarNameArray(i)不能成为字符串“QMCounter”而是变量QMCounter。由于“主”工作表中的每一行都不会被复制到其他每个工作表中,因此我需要能够独立控制每个计数器变量的值。这可能与VBA有关吗?

编辑:此电子表格的目的是查看“主”表格中行中的特定单元格值,然后根据这些值,将该行复制到10“从属”的组合工作表。因此,例如,“主”表的第1行可以仅复制到从属表9,但是主表的第2行可以复制到从属表1,2,3,6,7,9和10。可以将行3复制到不同的从属表单集。这一切都取决于特定细胞的值,我事先并不知道。

我为10个下属工作表中的每一个都有计数器变量来跟踪当前行,并确保我不会简单地将所有内容复制到该工作表的第一行。将它们称为Sheet1到10和Counter1到10,Sheet1和Counter1通过10链接。因此,如果我将一张从主工作表复制到Sheet1,并且只有当我从主工作表复制到Sheet1时,我才会增加Counter1。但是,正如我已经说过的那样,根据用户填写的特定单元格的值,在运行时确定复制到行的特定从属表单。

所以我想采用像

这样的高度重复的代码
.Rows(material.Row).Copy Destination:=Worksheets("Sheet1").Range("A" & Counter1)
.Rows(material.Row).Copy Destination:=Worksheets("Sheet3").Range("A" & Counter3)
.Rows(material.Row).Copy Destination:=Worksheets("Sheet4").Range("A" & Counter4)

其中99%的代码是相同的,具有更清晰和更通用的东西。

1 个答案:

答案 0 :(得分:1)

当你可以直接使用数组时,不需要一个变量名数组......

Dim Counters
Counters = Array(1,2,3,4,5)

For i = LBound(Counters) to Ubound(Counters)

    CopyRow Material, DestWorksheet, Counters(i)

Next i

编辑:如果您只是在任何现有行下面追加新行:

.Rows(material.Row).Copy _
   Destination:=Worksheets("Sheet1").Cells(Rows.Count,1).End(xlUp).offset(1,0)

只要ColA中的任何复制行都有值,就可以正常工作。