我有一个宏从一个“主”工作表复制一行到多个基于一组规则的其他工作表,但并不是每一行都会复制到每个工作表。因此,我有一组变量用作不同工作表上每行的“计数器”,这样我就可以跟踪当前行并且不会覆盖任何给定工作表上的任何行。这导致了许多类似于以下的丑陋代码。VBA:变量名称阵列
.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%是相同的,用的东西更清洁,更通用。
你想做的事情不能按照你想要的方式完成。我建议你告诉我们更多关于你的实际目标,并停止关注你感知的问题。 – RubberDuck 2015-02-06 18:17:55
@RubberDuck - 目标是重构我的代码。采用丑陋且重复性强(但功能性)的代码,如第一个代码片段,并用(理想情况下)代替循环代码,其中我有一个将相关信息传递给(主行,目标表单和行目的地表格)。 – Aerogems 2015-02-06 18:48:32
简短的回答是:这不能在VBA中完成。现在,似乎您至少了解For/Next循环的概念,我认为问题只是您尝试实现它的方式,而没有看到更多代码,并且是问题的更好示例(并且所需的解决方案---请修改您的OP以包含这些细节!)这将很难提供帮助。 – 2015-02-06 18:52:18