我为我的部门构建了一个模板。
在此模板中,我在2个不同的工作表上使用代码来更新数据透视表。
问题不在于代码,但是我还是要插入它。
主要问题是代码无法对我的一些同事有效。
我们是一家丹麦公司,而公司的语言是英语,但是由于某些原因,我的一些同事将丹麦语作为他们的计算机/ Excel的主要语言。正是这些同事遇到了功能失调的模板。
Private Sub Worksheet_Activate()
Dim sht As Worksheet
Dim sht2 As Worksheet
Dim DataRange As Range
Dim LastRow As Long
Dim PivotName As String
Dim NewRange As String
Set sht2 = ThisWorkbook.Worksheets("Sales")
Set sht = ThisWorkbook.Worksheets("Pivot Sales")
PivotName = "Salgsmoms1"
LastRow = sht2.Cells(sht2.Rows.Count, "A").End(xlUp).Row
LastColumn = sht2.Cells(LastRow, sht2.Columns.Count).End(xlToLeft).Address(False, False, xlA1)
NewRange = sht2.Name & "!" & "A1:" & LastColumn
sht.PivotTables(PivotName).ChangePivotCache ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRange)
sht.PivotTables(PivotName).RefreshTable
End Sub
谢谢。
答案 0 :(得分:0)
对我来说,以下一行是唯一看起来有问题并可能引起问题的行
NewRange = sht2.Name & "!" & "A1:" & LastColumn
像这样一起摆弄地址可能会导致地址无效。如果使用.Address(External:=True)
,则始终可以确保它是有效的。不过,我认为SourceData:=
想要一个范围对象而不是地址。
因此,我建议...
Option Explicit
。SourceData:=NewRange
作为范围对象而不是地址。Option Explicit
Private Sub Worksheet_Activate()
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("Pivot Sales")
Dim sht2 As Worksheet
Set sht2 = ThisWorkbook.Worksheets("Sales")
Dim PivotName As String
PivotName = "Salgsmoms1"
Dim LastRow As Long
LastRow = sht2.Cells(sht2.Rows.Count, "A").End(xlUp).Row
Dim LastCell As Range
Set LastCell = sht2.Cells(LastRow, sht2.Columns.Count).End(xlToLeft)
Dim NewRange As Range
Set NewRange = sht2.Range("A1", LastCell)
sht.PivotTables(PivotName).ChangePivotCache ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRange)
sht.PivotTables(PivotName).RefreshTable
End Sub
如果此代码显示相同的错误,那么我敢打赌该错误与代码无关。