powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ошибка при обновлении сводной таблицы с помощью VBA
11 сообщений из 11, страница 1 из 1
Ошибка при обновлении сводной таблицы с помощью VBA
    #38339005
msleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток! Возникает ошибка и не могу понять почему. Есть лист в excel "И_By CCH" на нем сводная таблица "И_By CCH". Пытаюсь с помощью макроса её обновить, а потом выставить нужные значения в фильтре сводной таблице. Выдает ошибку "Run-time ошибка 1004 нельзя установить свойство Visible класса PivotItem" и подсвечивает следующую строчку. Помогите, что делаю не так?

Код: vbnet
1.
PivotItems(1).Visible = True



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
  
Dim exWb As Workbook
    Set exWb = ActiveWorkbook
    
'1 Обновление сводной таблицы

    exWb.Sheets("И_By CCH").Activate
    exWb.Sheets("И_By CCH").PivotTables("И_By CCH").RefreshTable 

'2 выставление нужных значений в фильтре сводной таблице    
    exWb.Sheets("И_By CCH").Activate
    With exWb.Sheets("И_By CCH").PivotTables("И_By CCH").PivotFields("Месяц (номер)")
    
        .PivotItems(1).Visible = True
        .PivotItems("" & CDbl(7) - 2 & "").Visible = True
        .PivotItems("" & CDbl(7) - 1 & "").Visible = True
        .PivotItems("" & CDbl(7) & "").Visible = True
        
        For i = 1 To .PivotItems.Count
            If .PivotItems(i).Visible = True And .PivotItems(i).Name <> ("" & CDbl(7) - 2 & "") And .PivotItems(i).Name <> ("" & CDbl(7) - 1 & "") And .PivotItems(i).Name <> ("" & CDbl(7) & "") Then
                .PivotItems(i).Visible = False
            End If
        Next
    End With
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38339451
Eugene_p1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msleg,

Breakpoint на
Код: vbnet
1.
With exWb.Sheets("И_By CCH").PivotTables("И_By CCH").PivotFields("Месяц (номер)")



Add Watch:
Код: vbnet
1.
2.
exWb.Sheets("И_By CCH").PivotTables("И_By CCH").PivotFields("Месяц (номер)")
exWb.Sheets("И_By CCH").PivotTables("И_By CCH").PivotFields("Месяц (номер)").PivotItems(1)



Если второе пишет Object not found, разворачиваете первое, смотрите, что внутри. Пробуете обратиться к PivotItems по имени, смотрите, какой у него индекс.

Навскидку ошибки в коде не вижу. Но она есть (С) :)
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38339986
msleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eugene_p1,

Я тоже немного был удивлен. Дома на компьютере у меня все работало. А когда запустил на рабочем компьютере вылезла эта ошибка.
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38340004
msleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я кажется понял в чем проблема. При обновлении сводной таблице. Происходит подключение к внешней БД Access. И как только сводная подключается. код макроса продолжает работу (не дожидаясь полного обновления сводной таблицы) устанавливать фильтры. А на самом деле сводная таблица еще не загрузила все данные с БД ( она продолжает в фоновом режиме подгружать данные из БД). И при попытке поменять значения фильтра выскакивает ошибка.

Код: vbnet
1.
2.
3.
4.
'1 Обновление сводной таблицы

    exWb.Sheets("И_By CCH").Activate
    exWb.Sheets("И_By CCH").PivotTables("И_By CCH").RefreshTable 



Как мне поставить паузу или запретить продолжать выполнять макрос, пока все данные не загрузятся в своднюю?
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38340959
Eugene_p1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msleg,

Попробуйте

Код: vbnet
1.
2.
Dim iRslt as integer
iRslt = exWb.Sheets("И_By CCH").PivotTables("И_By CCH").RefreshTable 


Проверяйте в дебагере, на этой строке брейкпоинт - сразу увидите, возвращается до обновления, или после.
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38340966
Eugene_p1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msleg,

Есть еще вариант:

Код: vbnet
1.
Application.Wait(1000)



Но стоит иметь в виду, что
The Wait method suspends all Microsoft Excel activity and may prevent you from performing other operations on your computer while Wait is in effect. However, background processes such as printing and recalculation continue.
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38340968
Eugene_p1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38341120
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene_p1msleg,

Есть еще вариант:

Код: vbnet
1.
Application.Wait(1000)



Но стоит иметь в виду, что
The Wait method suspends all Microsoft Excel activity and may prevent you from performing other operations on your computer while Wait is in effect. However, background processes such as printing and recalculation continue.

Чтобы ничего не "застывало" можно вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Option Explicit
 
Public Declare Function SetTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
 
Public Declare Function KillTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long) As Long
 
Private m_TimerID As Long
 
 'Note:  The duration is measured in milliseconds.
 '         1,000 milliseconds = 1 second
Public Sub StartTimer(ByVal Duration As Long)
     'If the timer isn't already running, start it.
    If m_TimerID = 0 Then
        If Duration > 0 Then
            m_TimerID = SetTimer(0, 0, Duration, AddressOf TimerEvent)
            If m_TimerID = 0 Then
                MsgBox "Timer initialization failed!"
            End If
        Else
            MsgBox "The duration must be greater than zero."
        End If
    Else
        MsgBox "Timer already started."
    End If
End Sub
 
Public Sub StopTimer()
     'If the timer is already running, shut it off.
    If m_TimerID <> 0 Then
        KillTimer 0, m_TimerID
        m_TimerID = 0
    Else
        MsgBox "Timer is not active."
    End If
End Sub
 
Private Sub TimerEvent()
    Debug.Print "Timer event fired: "; Format$(Now, "long time")
    StopTimer
    'Your code
End Sub

Sub test()

StartTimer 10000

End Sub
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38345008
msleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему возникает ошибка при обновлении кэш сводной таблицы, где ошибка (office 2010)

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
    Set exWb = ThisWorkbook
    
    Dim pt As PivotTable, pc As PivotCache
    Set pt = exWb.Sheets("Аудиторы").PivotTables(1)
    Set pc = exWb.PivotCaches(pt.CacheIndex)
    
    exWb.Sheets("Аудиторы").Select
    pc.Refresh 'обновление кэш
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38348646
Eugene_p1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msleg,

try ... catch
...
Рейтинг: 0 / 0
Ошибка при обновлении сводной таблицы с помощью VBA
    #38348725
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene_p1msleg,

try ... catch

В Office есть только
Код: vbnet
1.
On Error ...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ошибка при обновлении сводной таблицы с помощью VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]