Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ошибка при обновлении сводной таблицы с помощью VBA / 11 сообщений из 11, страница 1 из 1
22.07.2013, 13:58
    #38339005
msleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при обновлении сводной таблицы с помощью VBA
Всем доброго времени суток! Возникает ошибка и не могу понять почему. Есть лист в 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
22.07.2013, 17:25
    #38339451
Eugene_p1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при обновлении сводной таблицы с помощью VBA
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
23.07.2013, 09:56
    #38339986
msleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при обновлении сводной таблицы с помощью VBA
Eugene_p1,

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

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

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



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

Попробуйте

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


Проверяйте в дебагере, на этой строке брейкпоинт - сразу увидите, возвращается до обновления, или после.
...
Рейтинг: 0 / 0
23.07.2013, 17:13
    #38340966
Eugene_p1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при обновлении сводной таблицы с помощью VBA
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
23.07.2013, 17:14
    #38340968
Eugene_p1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при обновлении сводной таблицы с помощью VBA
...
Рейтинг: 0 / 0
23.07.2013, 18:24
    #38341120
lbppb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при обновлении сводной таблицы с помощью VBA
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
26.07.2013, 12:33
    #38345008
msleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при обновлении сводной таблицы с помощью VBA
Почему возникает ошибка при обновлении кэш сводной таблицы, где ошибка (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
30.07.2013, 13:32
    #38348646
Eugene_p1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при обновлении сводной таблицы с помощью VBA
msleg,

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

try ... catch

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


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