我使用这个代码来更新我的所有数据透视表的来源,但我总是得到
“运行时间错误要求‘424’对象”。
怪异的是,配股代码的功能循环内的实际工作没有这个错误,所以我不认为这是函数的代码,但我打电话的方式。我想知道为什么它不工作。
Private Sub Workbook_Open()
For Each st In ActiveWorkbook.Worksheets
For Each pt In st.PivotTables
UpdatePivotSource (pt)
Next
Next
End Sub
Sub UpdatePivotSource(pt As PivotTable)
Dim StartPoint As Range
Dim NewRange As String
Dim LastCol As Long
Dim lastRow As Long
Dim Data_Sheet As Worksheet
Dim DataRange As Range
Set Data_Sheet = ThisWorkbook.Worksheets(Split(pt.PivotCache.SourceData, "!")(0))
Set StartPoint = Data_Sheet.Range("A1")
LastCol = StartPoint.End(xlToRight).Column
lastRow = StartPoint.End(xlDown).Row
Set DataRange = Data_Sheet.Range(StartPoint, Data_Sheet.Cells(lastRow, LastCol))
NewRange = Data_Sheet.Name & "!" & DataRange.Address(ReferenceStyle:=xlR1C1)
pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRange)
End Sub
更改子这一个:
Private Sub Workbook_Open()
Dim pt As Object 'or Dim pt As PivotTable
For Each st In ActiveWorkbook.Worksheets
For Each pt In st.PivotTables
UpdatePivotSource pt
Next
Next
End Sub
不同的是,pt
被声明为对象而pt
不是括号内。在VBA参数括号应谨慎使用,只有当一个人知道什么是happenning。例如,对象是通过引用(ByRef
)和括号力ByVal
传递通过。
为了避免非声明的变量在未来使用期权上的模块的顶部明确 - What do Option Strict and Option Explicit do?