我有一些VBA代码,它设置为查找动态(更改)的数据表,代码然后更改范围以适应数据透视表,并刷新基于新范围的数据透视表。Excel VBA - 输入过滤器到数据透视表返回对象需要
代码一直运行,直到它到达需要应用过滤器的部分。我有一个日期值,我已经声明一个字符串称为PivotFilter,当代码去应用过滤器,我得到一个运行时错误1004 - 应用程序定义或对象定义的错误
我一直在试图找出在过去的两个小时内,似乎无法解决它,我试图将字符串更改为一个范围,这也没有奏效。有什么建议么?
编辑 修正错误区段的错字,我仍然得到应用程序定义或对象定义的错误
Sub PortfolioDataLoad()
Dim wb1 As Workbook
Dim ws1, ws2, ws3, ws4, ws5 As Worksheet
Dim r1, r2, r3 As Range
Dim StartPoint, DataRange As Range
Dim PivotName, Pivotname2, Pivotname3, Pivotname4 As String
Dim Datefrom, Dateto As Range
Dim PivotFilter As String
PivotFilter = Worksheets("Configuration").Range("B1")
PivotName = "PivotTable3"
Pivotname2 = "PivotTable4"
Pivotname3 = "PivotTable5"
Pivotname4 = "PivotTable1"
Application.StatusBar = "Transforming data into report graphs..."
'Set Variables Here
Set wb1 = ThisWorkbook
Set ws1 = wb1.Sheets("Control Sheet")
Set ws2 = wb1.Sheets("Program Data")
Set ws3 = wb1.Sheets("Configuration")
Set ws4 = wb1.Sheets("Overview")
If ws1.Visible = False Then
ws1.Visible = True
End If
'Dynamically Retrieve Data from Program Data
Set StartPoint = ws2.Range("A1")
Set DataRange = ws2.Range(StartPoint, StartPoint.SpecialCells(xlLastCell))
NewRange = ws2.Name & "!" & _
DataRange.Address(ReferenceStyle:=xlR1C1)
If WorksheetFunction.CountBlank(DataRange.Rows(1)) > 0 Then
MsgBox "One of your data columns in the 'Program Data' tab has a blank heading." & vbNewLine _
& "Please fix and re-run!.", vbCritical, "Column Heading Missing!"
Exit Sub
End If
'Change Pivot Range to Cache set above
ws3.PivotTables(PivotName).ChangePivotCache _
ThisWorkbook.PivotCaches.Create(_
SourceType:=xlDatabase, _
SourceData:=NewRange)
ws3.PivotTables(Pivotname2).ChangePivotCache _
ThisWorkbook.PivotCaches.Create(_
SourceType:=xlDatabase, _
SourceData:=NewRange)
ws3.PivotTables(Pivotname3).ChangePivotCache _
ThisWorkbook.PivotCaches.Create(_
SourceType:=xlDatabase, _
SourceData:=NewRange)
ws3.PivotTables(Pivotname4).ChangePivotCache _
ThisWorkbook.PivotCaches.Create(_
SourceType:=xlDatabase, _
SourceData:=NewRange)
'Refresh Tables
ws3.PivotTables(PivotName).RefreshTable
ws3.PivotTables(Pivotname2).RefreshTable
ws3.PivotTables(Pivotname3).RefreshTable
ws3.PivotTables(Pivotname4).RefreshTable
'Set Date in Pivot Table Filter - Results in Run-time error '424': Object Required
ws3.PivotTables(PivotName).PivotFields("Planning Month").PivotFilters.Add _
Type:=xlBeforeOrEqualTo, Value1:=PivotFilter
ws3.PivotTables(Pivotname2).PivotFields("Planning Month").PivotFilters.Add _
Type:=xlBeforeOrEqualTo, Value1:=PivotFilter
ws3.PivotTables(Pivotname4).PivotFields("Planning Month").PivotFilters.Add _
Type:=xlBeforeOrEqualTo, Value1:=PivotFilter
End Sub
道歉,我只是修正了错字但我仍然得到应用程序定义或定义的对象错误 – PootyToot 2014-10-27 05:21:05
谢谢你这些,我已经改变了声明更明确的像你上面显示,有我的透视表过滤器中的计划月份值,但仍显示相同的错误。 难道是代码引用的特定日期格式为dd/mm/yy的单元格值? (澳大利亚日期系统) – PootyToot 2014-10-27 23:09:29