Excel VBA代码无法在某些计算机上运行

时间:2018-07-09 11:51:19

标签: excel excel-vba vba

我为我的部门构建了一个模板。
在此模板中,我在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

谢谢。

1 个答案:

答案 0 :(得分:0)

对我来说,以下一行是唯一看起来有问题并可能引起问题的行

NewRange = sht2.Name & "!" & "A1:" & LastColumn

像这样一起摆弄地址可能会导致地址无效。如果使用.Address(External:=True),则始终可以确保它是有效的。不过,我认为SourceData:=想要一个范围对象而不是地址。

因此,我建议...

  1. 使用Option Explicit
  2. 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

如果此代码显示相同的错误,那么我敢打赌该错误与代码无关。