6

Когда вы создаете таблицу в Excel (я использую Excel 2007), вы можете дать ей имя, которое отображается в диалоговом окне диспетчера имен. Тем не менее, имя имеет область видимости книги. Я хотел бы иметь таблицу с именем, ограниченным только для рабочего листа, если это возможно (точно так же, как именованные формулы / диапазоны). Является ли это возможным?

Например, я хотел бы иметь таблицу с именем «Примечания» на нескольких различных листах. Любая данная таблица будет ссылаться только на тот рабочий лист, на котором она находится на самом деле, и я бы предпочел, чтобы на каждом рабочем листе не было таблицы с другим именем. Я также предпочел бы видеть имя таблицы, сгруппированное с другими именованными формулами, расположенными на этом рабочем листе, когда я сортирую по области в диалоговом окне диспетчера имен.

3 ответа3

5

Для полноты, я почти уверен, что ответ на мой вопрос "нет".

Конечно, я не приму это и приму ответ, который показывает, что это неправильно, или тот, который объясняет, почему это правильно.

1

Это может быть полезно в качестве обходного пути:

    '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
0

Я столкнулся с той же проблемой. В своем коде 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.

Простой обходной путь - создание имен с локальной областью действия, которые ссылаются на таблицу. Таким образом, у вас будет два имени для каждой таблицы - одно с глобальной областью действия, а другое только с текущей областью таблицы. (В диалоговом окне "Определить имя" назовите новый диапазон "Примечания", измените область на рабочий лист, а "Относится к" на = Таблица1 (или любую таблицу, названную в Excel)). Сделайте это на первом листе, затем скопируйте лист. Таблицы будут иметь одинаковые имена с областью действия только для этого листа. Недостатком является то, что вы не можете использовать обычные ссылки на таблицы при использовании дублированного имени, например, "= Average (Names [Column1])" не работает. :( Если вы используете только небольшой выбор столбцов таблицы, вы можете создать имя для каждого столбца, который вы хотите использовать в другом месте, "myColumn1" относится к «= Table1 [Column1]».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .