2017-02-10 95 views
2

我有此代碼選擇日期並更改數據透視表的過濾器以反映相關信息。但有些時候這個工程有的時候它給我的vba中的數據透視表篩選器無法正常工作

錯誤1004應用程序定義或對象定義的錯誤

這是推動我瘋了,我不知道發生了什麼,尤其是因爲這個代碼起作用,然後它不會,沒有任何改變。

Dim DataVenda As Date 
DataVenda = InputBox("Data de Vendas (dd/mm):") 

ActiveSheet.Range("B1").Select 
With Selection 
    ActiveSheet.PivotTables("DinTblResumoDiario").PivotFields("Data:").ClearAllFilters 
    ActiveSheet.PivotTables("DinTblResumoDiario").PivotFields("Data:").CurrentPage = DataVenda 
End With 

的錯誤是在最後的命令:ActiveSheet.PivotTables("DinTblResumoDiario").PivotFields("Data:").CurrentPage = DataVenda

+1

你會感覺好多了,當你把那個'ActiveSheet',改爲紙張的代號明確,:) –

+0

您是否嘗試過在確認頁面,您正試圖將其設置存在於過濾器內?另外,請嘗試設置「EnableMultiplePageItems = False」。 –

+1

你知道嗎,總是有輸入項目? AFAIK,如果你嘗試選擇一個不存在的值,數據透視表會產生一個錯誤。 –

回答

0

像上面寫的,最好避免使用ActiveSheetSelectSelection,並且使用完全合格的對象,而不是。

下面的代碼我使用PivotTable類型的對象來定義和設置數據透視表,也爲PivotField

我還添加了另一種類型的InputBox,強制用戶輸入格式爲Date的值。

注意:有機會的話,在InputBox選擇的值沒有任何地方發現的數據透視表裏面,所以我添加了一個方法來檢查它在下面的代碼。

代碼

Option Explicit 

Sub OccupancyPivot() 

Dim wsSheet    As Worksheet 
Dim PT     As PivotTable 
Dim PTFld    As PivotField 
Dim DataVenda   As Date 

' use this type of Input Box to force the user to enter a date format 
DataVenda = Application.InputBox("Data de Vendas (dd/mm):", "Select date", FormatDateTime(Date, vbShortDate), Type:=1)  

Set wsSheet = ThisWorkbook.Worksheets("Sheet1") ' <-- modify "Sheet1" to your Pivot's sheet name 

On Error Resume Next 
Set PT = wsSheet.PivotTables("DinTblResumoDiario") ' set the PivotTable  
On Error GoTo 0 
If PT Is Nothing Then ' "DinTblResumoDiario" Pivot Table doesn't exist 
    MsgBox "Pivot Table 'DinTblResumoDiario' doesn't exist!" 
Else ' "DinTblResumoDiario" Pivot Table exists 
    Set PTFld = PT.PivotFields("Data:") ' <-- set the pivot field  
    PTFld.ClearAllFilters 

    On Error Resume Next 
    PTFld.CurrentPage = DataVenda ' Error line if DataVenda isn't valid (no value inside Pivot Table matches it) 
    If Err.Number <> 0 Then 
     MsgBox "Filter Didn't get applied, no value inside Pivot Table matches your selection" 
    End If 
    On Error GoTo 0 
End If 

End Sub