Ошибка несоответствия типов - фильтрация сводной таблицы через Excel VBA - PullRequest
0 голосов
/ 19 июля 2011

Я пытался заставить работать сводный фильтр, используя поле ввода. Я украл большую часть кода из http://www.ozgrid.com/VBA/hide-pivot-fields.htm и применял к своей электронной таблице и продолжаю получать ошибку несоответствия типов, которую я не могу понять. Пример был построен для чисел, и мне нужно фильтровать по тексту.

Средство поиска ошибок останавливается на функции Evaluate, но обе переменные определены как текстовые, поэтому я думаю, что это должна быть переменная Org. Любые предложения приветствуются - код ниже.

Sub HideByCriteria () Dim pt As PivotTable, pi As PivotItem Dim Org As String Dim strCri As String Dim bHide As Boolean Dim xlCalc As XlCalculation

Set pt = Sheets("Req Posting Status").PivotTables("PivotTable1")

    strCri = InputBox("Enter Organization" _
        & Chr(13) & "Valid Criteria Examples:" _
        & Chr(13) & "HCS-CT for all HCS-CT orgs" _
        & Chr(13) & "or CKS for any org that contains CKS", "HIDE AGE")

 If strCri = vbNullString Then Exit Sub
 strCri = Trim(strCri)

 pt.ManualUpdate = True
 With Application
        xlCalc = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
 End With

'On Error GoTo NonValidCriteria:

    For Each pi In pt.PivotFields("Organization").PivotItems
        Org = pi
        bHide = Evaluate(Org & strCri)
        pi.Visible = bHide
    Next pi

pt.ManualUpdate = False
With Application
        .Calculation = xlCalc
        .ScreenUpdating = True
 End With

Выход Sub

1 Ответ

0 голосов
/ 13 августа 2011

Код ниже был протестирован в Excel 2003 и отлично работает.Если у вас есть другие вопросы, пожалуйста, дайте мне знать.В приведенном выше коде было много избыточного кода.

ПОЦЕЛУЙ - Делайте это просто глупо.

Public Sub HideMacro()
Dim pi As PivotItem
Dim critera As String

critera = LCase$(Trim$(InputBox("Do you want to see HCS-CT or CKS?", "Critera", "CKS")))

If critera = vbNullString Then
    MsgBox "Cancelled Filter", vbInformation + vbOKOnly, "Information"
    Exit Sub
ElseIf critera <> "hcs-ct" And critera <> "cks" Then
    MsgBox "Invalid entry. Please try again.", vbCritical + vbOKOnly, "Invalid Entry"
    Exit Sub
End If

With Sheet4.PivotTables(1)
    .ManualUpdate = True
    For Each pi In .PivotFields("Orginization").PivotItems
        pi.Visible = (LCase$(pi.Value) = critera) 'Hides other value and shows wanted value.
    Next
    .ManualUpdate = False
End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...