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.
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.
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
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]".