Existe uma maneira de dar a uma tabela do Excel um nome que tenha o escopo da planilha em vez do escopo da pasta de trabalho?

6

Quando você cria uma tabela no Excel (estou usando o Excel 2007), é possível fornecer um nome que apareça na caixa de diálogo Gerenciador de nomes. No entanto, o nome tem escopo de pasta de trabalho. Eu gostaria de ter uma tabela com um nome com escopo apenas para a planilha , se possível (assim como as fórmulas / intervalos nomeadas podem ser). É possível?

Por exemplo, eu gostaria de ter uma tabela chamada 'Notes' em várias planilhas diferentes. Qualquer tabela fornecida só seria referenciada na planilha na qual ela está realmente ativa, e eu prefiro não ter que cada planilha tenha uma tabela com um nome diferente. Eu também prefiro ver o nome da tabela agrupada com outras fórmulas nomeadas com escopo para essa planilha quando classifico por escopo na caixa de diálogo Gerenciador de nomes.

    
por jtolle 07.08.2010 / 19:56

3 respostas

5

Para completar, tenho certeza que a resposta para minha pergunta é "não".

É claro que vou deixar de aceitá-lo e aceitar uma resposta que mostre que isso está errado ou que explique por que está certo.

    
por 23.10.2011 / 22:36
1

Isso pode ser útil como solução alternativa:

    '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
    
por 19.11.2013 / 03:26
0

Estou com o mesmo problema. No meu código VBA, recorri a olhar os objetos para a planilha ativa e verificar as seis primeiras letras (quando copio uma planilha com tabelas, o Excel 2007 simplesmente anexa um número ao final dos nomes das tabelas).

' 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

Em seguida, no resto do meu código, eu uso os novos nomes: decTable, pathTable e processTable.

Uma solução simples é criar nomes com escopo local que se refiram à tabela. Então você terá dois nomes para cada tabela - um com escopo global e outro com apenas o escopo atual da planilha. (Na caixa de diálogo Definir nome, nomeie o novo intervalo "anotações", altere o escopo para a planilha e "Refere-se a" para = Tabela1 (ou qualquer que seja o Excel chamado a tabela)). Faça isso na primeira planilha e copie a planilha. As tabelas terão os mesmos nomes com escopo para essa planilha. A desvantagem é que você não pode usar a referência de tabela normal ao usar o nome duplicado, por exemplo, "= average (Names [Column1])" não funciona. :( Se você estiver usando apenas uma pequena seleção de colunas da tabela, você pode criar um nome para cada coluna que você deseja usar em outro lugar, "myColumn1" refere-se a "= Tabela1 [Coluna1]".

    
por 05.12.2014 / 21:35