2016-03-02 33 views
1

我是一个绝对的VBA noob,但考虑到我的工作需求不断变化,最近我不得不接近编码领域,因为我们正在尝试自动执行相当多的任务。我已经是下面这段代码:VBA - 组合工作表变更

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim ws As Worksheet 
Dim pt As PivotTable 
Dim pi As PivotItem 
Dim strField As String 

strField = "Manager" 

On Error Resume Next 
Application.EnableEvents = False 
Application.ScreenUpdating = False 


If Target.Address = Range("D1").Address Then 

    For Each ws In ThisWorkbook.Worksheets 
     For Each pt In ws.PivotTables 
      With pt.PageFields(strField) 
       For Each pi In .PivotItems 
        If pi.Value = Target.Value Then 
         .CurrentPage = Target.Value 
         Exit For 
        Else 
         .CurrentPage = "(All)" 
        End If 
       Next pi 
      End With 
     Next pt 
    Next ws 

End If 

Application.EnableEvents = True 
Application.ScreenUpdating = True 

End Sub 

我想这跟下面的代码合并:

Range("AC22:AC60").Copy Range("AF22:AF60") 
Range("AL22:Al60").Copy Range("AN22:AN60") 
Range("AU22:AU60").Copy Range("AW22:AW60") 

但我只想范围复制如果D1范围在第一码变化。很显然,我想自动化,而不是将这些副本编码为宏,所以我请帮助我如何在这里一箭双雕。

我该如何结合?

大加赞赏,

+2

我可能会误解你的问题,但你为什么不把复制代码放到If语句中呢? – RobK

+0

那么,代码的主要目标是根据D1的值同步数据透视表,其次我也想要这个复制粘贴发生,但以这样的方式,不会干涉枢轴操作.. 当我尝试把它放在一起时,代码不会执行,因为有多个范围(我怀疑)。 – bomo123

回答

0

如果我正确理解你的问题,这应该只是做的伎俩(但我真的不知道,如果我完全明白你的问题):

If Target.Address = Range("D1").Address Then 

For Each ws In ThisWorkbook.Worksheets 
    For Each pt In ws.PivotTables 
     With pt.PageFields(strField) 
      For Each pi In .PivotItems 
       If pi.Value = Target.Value Then 
        .CurrentPage = Target.Value 
        Exit For 
       Else 
        .CurrentPage = "(All)" 
       End If 
      Next pi 
     End With 
    Next pt 
Next ws 

Range("AC22:AC60").Copy Range("AF22:AF60") 
Range("AL22:Al60").Copy Range("AN22:AN60") 
Range("AU22:AU60").Copy Range("AW22:AW60") 

End If 

如果这是不是你需要的,你的意思是?

If Target.Address = Range("D1").Address Then 

For Each ws In ThisWorkbook.Worksheets 
    For Each pt In ws.PivotTables 
     With pt.PageFields(strField) 
      For Each pi In .PivotItems 
       If pi.Value = Target.Value Then 
        .CurrentPage = Target.Value 
        Range("AC22:AC60").Copy Range("AF22:AF60") 
        Range("AL22:Al60").Copy Range("AN22:AN60") 
        Range("AU22:AU60").Copy Range("AW22:AW60") 
        Exit For 
       Else 
        .CurrentPage = "(All)" 
       End If 
      Next pi 
     End With 
    Next pt 
Next ws 

End If