有没有办法给 Excel 表指定一个工作表范围而不是工作簿范围的名称?

有没有办法给 Excel 表指定一个工作表范围而不是工作簿范围的名称?

在 Excel 中创建表时(我使用的是 Excel 2007),您可以为其指定一个名称,该名称显示在“名称管理器”对话框中。但是,该名称具有工作簿范围。我希望有一个名称范围仅限于工作表如果可能的话(就像命名公式/范围一样)。可能吗?

例如,我希望在几个不同的工作表上有一个名为“Notes”的表格。任何给定的表格都只能从它实际所在的工作表中引用,并且我不希望每个工作表都有一个具有不同名称的表格。我还希望当我在“名称管理器”对话框中按范围排序时,能够看到表格名称与范围在该工作表的其他命名公式分组在一起。

答案1

为了完整起见,我很确定我的问题的答案是“否”。

当然,我会不接受这一点,并接受一个表明这是错误的答案,或者一个解释为什么它是正确的答案。

答案2

这可能是一种有用的解决方法:

    'Given a worksheet name and a table(ListObject)name "prefix," return the actual name of the ListObject on the sheet.
    'For example, if a worksheet containing a table called "ConfigTbl" is duplicated, it will get a name
    'like "ConfigTbl3279" on the worksheet copy.
    'This is a workaround for the fact that Tables are worksheet-level objects;
    'Excel doesn't have local/worksheet-level tables.
    'If you pass in one of the "Special Item" qualifiers, then the function will return the specified
    'range as an object (e.g., "[#All]" for the whole table or "[#Headers]" for the column names).
    'Returns #N/A if error.       


     Public Function tableName(wksht As String, tblName As String, Optional specialItem)

     Dim lObj As ListObject

     On Error GoTo ErrHandler
     tblName = UCase(tblName)

     For Each lObj In Worksheets(wksht).ListObjects
         If (UCase(Left(lObj.Name, Len(tblName))) = tblName) Then
             tableName = lObj.Name
             If Not (IsMissing(specialItem)) Then Set tableName = Evaluate(tableName & specialItem)
             Exit Function
         End If
     Next lObj

    ErrHandler:
        tableName = CVErr(xlErrNA)

    End Function

答案3

我也遇到过同样的问题。在我的 VBA 代码中,我只能查看活动工作表的对象并检查前 6 个字母(当我复制包含表格的工作表时,Excel 2007 只会在表格名称末尾附加一个数字)。

' First get table names on this worksheet (copying worksheet changes names of tables)
Dim oSh As Worksheet
Dim oLo As ListObject
Set oSh = ActiveSheet
For Each oLo In oSh.ListObjects
    Application.Goto oLo.Range
    'MsgBox ("Table found: " & oLo.Name & ", " & oLo.Range.Address)
'    pathsTable =
    Select Case Left(oLo.Name, 6)
        Case "tblDec"
            decTable = oLo.Name
        Case "tblPat"
            pathTable = oLo.Name
        Case "tblPro"
            processTable = oLo.Name
    End Select
Next

然后在我的其余代码中,我使用新名称:decTable、pathTable 和 processTable。

一个简单的解决方法是创建具有引用表的本地范围的名称。因此,每个表将有两个名称 - 一个具有全局范围,一个仅具有当前工作表范围。(在“定义名称”对话框中,将新范围命名为“Notes”,将范围更改为工作表,将“引用”更改为 =Table1(或 Excel 命名的表))。在第一个工作表上执行此操作,然后复制工作表。表将具有相同的名称,但范围仅限于该工作表。缺点是使用重复名称时不能使用正常的表引用,例如“=average(Names[Column1])”不起作用。:( 如果您只使用表中的一小部分列,则可以为要在其他地方使用的每个列创建一个名称,“myColumn1”引用“=Table1[Column1]”。

相关内容