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