Проблемы выбора PivotItems в VBA - PullRequest
1 голос
/ 07 марта 2012

У меня есть следующий код, который проходит через диапазон и форматирует немного PivotItems, в соответствии со значением диапазона.Код переходит с одного листа (с именами и ответами учащихся) на другой (с сводной таблицей с двумя RowLabels, QuestionNo и StudentName), а когда находит правильный PivotItem, изменяет его формат.

Sub Macro1()

    Dim student As String, q1 As String
    Dim pt as PivotTable

    Worksheets("SheetPivot").Activate
    Set pt = ActiveSheet.PivotTables(1)

    'Jumps to the Sheet with the range to loop
    Worksheets("QuizState").Activate
    'Goes to the first value
    Range("A1").Select

    'Sarts the loop
    Do Until IsEmpty(ActiveCell.Value)
        'Determines what type of value is.
        student = ActiveCell.Value 
        q1 = ActiveCell.Offset(0,1).Value
        If q1 = "WRONG" then
             'Jumps to Sheet with PivotTable
              Worksheets("SheetPivot").Activate
              pt.PivotFields("StudentName").PivotItems(student).LabelRange.Select
              Selection.Interior = 65535  'Yellow
              Worksheets("QuizState").Activate
        End If
        ActiveCell.Offset(1,0).Select
    Loop
 End Sub

Теперь, по какой-то причине иногда это работает, иногда он возвращает Run-time error '1004': Unable to get the PivotItems property of the PivotField Class, что, я полагаю, связано с тем, что не найден элемент student, но он точно есть.

Может кто-нибудь помочь мне отладитькод?

1 Ответ

1 голос
/ 07 марта 2012

Может кто-нибудь помочь мне отладить код?

Я могу помочь вам отладить его, если вы можете загрузить образец рабочей книги на wikisend.com и поделиться ссылкой здесь?

Я полагаю, это связано с тем, что предмет ученика не найден, но он обязательно есть.

Попробуйте это

student = Trim(ActiveCell.Value)

Также вы можете переписать свой код без использования .Select и .Activate. Ваш код будет работать намного быстрее :) Например ( НИЖЕ КОД НЕПРОВЕРЕН )

Sub Macro1()
    Dim student As String, q1 As String
    Dim pt As PivotTable
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim ws2LastRow As Long, i As Long

    Set ws1 = Worksheets("SheetPivot")
    Set pt = ws1.PivotTables(1)

    Set ws2 = Worksheets("QuizState")

    With ws2
        ws2LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
        For i = 1 To ws2LastRow
            'Determines what type of value is.
            student = Trim(.Range("A" & i).Value)
            q1 = UCase(Trim(.Range("B" & i).Value))
            If q1 = "WRONG" Then
                'Jumps to Sheet with PivotTable
                pt.PivotFields("StudentName").PivotItems(student).LabelRange.Interior = 65535  'Yellow
            End If
        Next
    End With
 End Sub
...