我的代码出了问题。 我正在尝试激活一个代码,该代码将单元格放在一个工作表中并过滤另一个数据表中的数据,如果该值不存在,则会显示一个msgbox,表明存在错误。 我的问题是,当值为true时,我希望它显示msgbox“值不存在于枢轴中”。当“if”为假时,我需要过滤数据,但它不起作用。 有代码:
Sub MM()
Sheets("sheets1").Select
Selection.Copy
Sheets("pivot").Select
Range("C1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.PivotTables("pivottable1").PivotFields("filter WBS").ClearAllFilters
ActiveSheet.PivotTables("pivottable1").PivotCache.Refresh
If Not IsError(ActiveSheet.PivotTables("pivottable1").PivotFields("filter WBS").CurrentPage = Range("c1").Value) Then
MsgBox ("the value dosen't exists in the pivot")
Sheets("sheets1").Select
Else
ActiveSheet.PivotTables("pivottable1").PivotFields("filter WBS").CurrentPage = Range("c1").Value
End If
End Sub
我会很高兴得到一些帮助!
答案 0 :(得分:0)
不完全确定是否要根据所选单元格中的内容过滤枢轴,但这是我的建议。要指出有一种方法来过滤具有许多值的数据透视表,但我想你想要只对一个值进行过滤?另外,为pivot添加过滤器的方法是循环遍历所有字段值并将它们设置为可见或不可见。
Sub testi2()
'Bit waisty way to do it, you could just make a variable to hold the value -
Dim myValue As Variant
myValue = ActiveCell.Value
'Sheets("sheets1").Select
'Selection.Copy
Sheets("pivot").Select
'Range("C1").Select
'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Your choise tough, if you really need to copy the value to the cell C1 then by all
'means do, but you should still send the value to variable for code will be easier
'to be handled and clearer to read.
'Here you could also clear all past filters for the pivot if needed.
'I won't encourage to but if there are other filters present exept
'what is in filterWBS field, the code will run into an error.
Dim pItem As PivotItem
Dim ifFound As Boolean
ifFound = False
'loop trough the pivotfieldvalues to see if match exists, pivot tables have a need for at least one visible value.
For Each pItem In ActiveSheet.PivotTables("pivottable1").PivotFields("filter WBS").PivotItems
'if data exists then ifFound value will be set to true
If pItem = myValue Then
ifFound = True
End If
Next
'based on the if value found set fields visible or hidden
If ifFound = True Then
For Each pItem In ActiveSheet.PivotTables("pivottable1").PivotFields("filter WBS").PivotItems
If pItem <> myValue Then
pItem.Visible = False
Else
pItem.Visible = True
End If
Next
'if the value was not present show the message box
Else
MsgBox ("the value doesn't exists in the pivot")
'You could in this case clear the filter
End If
End Sub
答案 1 :(得分:0)
我找到了解决问题的方法。
Sub MM()
Sheets("Sheets1").Select
Selection.Copy
Sheets("Pivot").Select
Range("C1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.PivotTables("pivottable1").PivotFields("filter WBS").ClearAllFilters
ActiveSheet.PivotTables("pivottable1").PivotCache.Refresh
On Error GoTo msg
ActiveSheet.PivotTables("pivottable1").PivotFields("filter WBS").CurrentPage = Range("c1").Value
Exit Sub
msg:
MsgBox ("There is no data for this WBS in pivot")
Sheets("sheets1").Select
End Sub