Макрос не может получить правильное имя сводной таблицы

0

У меня есть следующий код (благодаря ответу на этом сайте), который выбирает лист в Excel и выбирает имя сводной таблицы на нем.

Sub PivotTableName()

    Sheets("PivotTable").Select

    Dim pt As PivotTable

    Set pt = ActivePivotTable

    If pt Is Nothing Then
        Debug.Print "No Active pivot table"
    Else
        Debug.Print "Active = " & pt.Name

    End If

End Sub

Function ActivePivotTable() As PivotTable
    Dim pt As PivotTable, rv
    For Each pt In ActiveSheet.PivotTables
        Debug.Print pt.Name, pt.TableRange2.Address
        If Not pt.Name = "" Then
            Set ActivePivotTable = pt
            Exit Function
        End If
    Next pt
End Function

Сводная таблица импортируется из базы данных MySQL и является единственной сводной таблицей на листе. Если таблица Excel Excel открывается и таблица импортируется (с использованием надстройки MySQL для Excel), а затем выполняется макрос, макрос работает отлично, давая ответ

Active = project1.mytable

Однако, если эта сводная таблица будет удалена и снова импортирована, Excel изменит новое импортированное имя сводной таблицы на "project1.mytable.2", однако при запуске макроса он все равно возвращается

Active = project1.mytable

Я удаляю сводную таблицу с помощью ctrl + a, а затем Delete, когда у меня есть ячейка в сводной таблице.

Кто-нибудь знает, почему он не подбирает правильное имя?

  • 1
    Если он единственный на листе, почему бы просто не использовать Sheets("PivotTable").PivotTables(1).Name ?
  • 0
    @Jay Не знаю, какова цель твоего кода. Что вам нужно сделать с Name сводной таблицы? Ваш лист всегда содержит одну PivotTable таблицу?
Теги:
excel-vba
excel
pivot-table

1 ответ

0

Если в листе "Сводная таблица" имеется только 1 PivotTable таблица, достаточно кода ниже:

Sub PivotTableName()

Dim i As Long

With Sheets("PivotTable")

    If .PivotTables.Count > 0 Then

        ' ==== DEBUG SCRIPT ====
        For i = 1 To .PivotTables.Count
            Debug.Print "Active = " & .PivotTables(1).Name
        Next i

        Debug.Print "Active = " & .PivotTables(1).Name
    Else
        Debug.Print "No Active pivot table"
    End If
End With

End Sub
  • 0
    Спасибо за ваш ответ, к сожалению, он по-прежнему возвращает «Active = project1.mytable» вместо «Active = project1.mytable.2». В Excel имя таблицы в инструментах сводной таблицы "project1.mytable.2"
  • 0
    @ Джей, ты уверен, что удалил предыдущую сводную таблицу?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню