使用VBA通过代号引用另一个工作簿中的工作表

时间:2014-03-07 17:18:30

标签: excel vba excel-vba

我正在尝试使用VBA将数据从一个工作簿复制到我当前的工作簿。 InputBook 是一个工作簿对象,指的是我想从中提取数据的文件。主要问题与引用 InputBook 工作簿中的特定工作表有关。在 InputBook 中,我有一个名为“Lines”的工作表,其代号为 LINES 。我更愿意通过其代号引用此工作表,例如:

NumItems = WorksheetFunction.CountA(InputBook.LINES.Columns(1))

这显然不起作用,我知道我可以使用以下任何一种方法使其发挥作用:

NumItems = WorksheetFunction.CountA(InputBook.Sheets("Lines").Columns(1))
NumItems = WorksheetFunction.CountA(InputBook.Sheets(2).Columns(1))
但是,我宁愿不使用这些方法中的任何一种,因为它们看起来不那么健壮。有没有办法在另一个打开的工作簿中引用工作表对象的代号?感谢。

2 个答案:

答案 0 :(得分:10)

您可以通过以下方式“破解”对其他工作簿工作表代码名称的引用:

Sub UseCodeNameFromOutsideProject()
    Dim WS As Worksheet
    With Workbooks("InputBook .xls")
        Set WS = _
            .Worksheets(CStr(.VBProject.VBComponents("Lines").Properties(7)))
        debug.print WS.Name
    End With
 End Sub

您的WS对象现在设置为此示例中代号为“Lines”的工作表。


原创灵感是here

答案 1 :(得分:0)

我可以将工作簿称为“I LIKE TEA”,但InputBook.I LIKE TEA.Columns(1)不会删除它。

使用const或:

提取名称
public enum InputSheets
   LINES = 2,
   GARMENTS = 4
end enum

允许:

InputBook.Sheets(InputSheets.LINES).Columns(1)

MyGetSheetFunction(InputBook, InputSheets.LINES)

您可以进一步使用包装类。