我有10个XLS,每个都包含几百行VBA,它们做同样的事情。我想将这个公共代码移动到第11个XLS,并让其他10个代码在第11个XLS中调用。 公共代码必须能够访问调用XLS中的所有数据和工作表。这个最后一个要求似乎没有通过SO上的这个问题的其他答案来解决。我可以将调用XLS的工作表作为参数或类似的东西传递吗?
答案 0 :(得分:7)
我建议您创建一个XLA文件(Excel Add In),而不是将其放入辅助XLS文件中。
这是XLA的目标。在这种情况下,XLA将以您想要的方式工作。
有关创建XLA的详细信息,请参阅this page。
答案 1 :(得分:3)
是的,您可以将对工作簿,工作表,范围等的引用作为参数传递给任何函数:
Public Sub CallMe(ByVal oWorkbook as Workbook)
Dim oWorksheet as Worksheet
Set oWorksheet = oWorkbook.Worksheets(1)
' Do stuff...
End Sub
请注意,您可能不得不重写从10个工作簿中复制的大量代码,因为它们将充满对“this”工作簿的隐式引用,例如Worksheets(1)
等。在上面的示例中,您现在需要说oWorkbook.Workbooks(1)
。