我有一个宏,它根据一组规则将一行(一个)从一个“主”工作表复制到几个其他工作表,但并不是每一行都会复制到每个工作表。所以我有一组变量作为不同工作表上每一行的“计数器”,这样我就可以跟踪当前行,而不会覆盖任何给定工作表上的任何行。这导致了许多丑陋的代码,类似于以下内容。
.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%的代码是相同的,具有更清晰和更通用的东西。
答案 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中的任何复制行都有值,就可以正常工作。