Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3267|回复: 7

循环插入数据透视表问题

[复制链接]
发表于 2012-12-24 10:39 | 显示全部楼层 |阅读模式
表格里有4个sheet,分别命名为"1" "2" "3" "4",需要对表格进行数据插入操作,四个sheet进行同样的数据插入操作。要求代码先对名为"1"的sheet插入透视表操作,然后是"2" "3" "4",代码运行时始终在名为"1"的sheet里运行,直至出错。代码如下,请高手帮忙看看是那里出了问题?
Sub TEST11()
'
' TEST Macro
'
'
    Dim WSD As Worksheet
    Dim PTCache As PivotCache
    Dim PT As PivotTable
    Dim PRange As Range
    Dim FinalRow As Long
    Dim FinalCol As Long
    Dim I As Integer
    Dim S As String
   
    For Each WSD In Worksheets '在表格内循环所有sheet
   
    '匹配sheet名字
    For I = 2 To 7
    S = CStr(I)
    If WSD.Name = "S" Then
    Set WSD = Worksheets("S")
    End If
    Next
   
   
    Range("AQ:CA").EntireColumn.Clear '清除其他数据透视表
        
    ' 定义输入数据以及数据源
    FinalRow = WSD.Cells(Application.Rows.Count, 1).End(xlUp).Row
    FinalCol = WSD.Cells(1, Application.Columns.Count).End(xlToLeft).Column
    Set PRange = WSD.Cells(1, 1).Resize(FinalRow, FinalCol)
    Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=PRange.Address)
        
    ' 创建数据透视表
    Set PT = PTCache.CreatePivotTable(TableDestination:=WSD.Cells(2, FinalCol + 6))
   
    With PT.PivotFields("PLINE")
        .Orientation = xlColumnField
        .Position = 1 'PLINE作为列标签放在第一列
    End With
    With PT.PivotFields("PMODLE")
        .Orientation = xlDataField
        .Function = xlCount
        .Position = 1
        .NumberFormat = "#,##0"
      
    End With
    With PT.PivotFields("是否过保")
        .Orientation = xlRowField
        .Position = 1 '是否过保作为行标签,放在第一行
        .PivotItems("否").Visible = False
        .PivotItems("#NUM!").Visible = False
        .PivotItems("#VALUE!").Visible = False
    End With
    With PT.PivotFields("PTYPE")
        .Orientation = xlRowField
        .Position = 2
    End With
    With PT.PivotFields("PMODLE")
        .Orientation = xlRowField
        .Position = 3
    End With
    Range("BA2").Select '选择起始坐标;
   
    Next
End Sub
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-12-24 10:49 | 显示全部楼层
回复

使用道具 举报

发表于 2012-12-24 10:54 | 显示全部楼层
--------这能行吗-------------
For I = 2 To 7
    S = CStr(I)
    If WSD.Name = "S" Then
    Set WSD = Worksheets("S")
    End If
    Next
----------------是不是想这样-------------------
For I = 2 To 7
    S = CStr(I)
    If WSD.Name = S Then
    Set WSD = Worksheets(S)
    End If
    Next
回复

使用道具 举报

 楼主| 发表于 2012-12-24 13:35 | 显示全部楼层
重新修改了一下,去掉了Range("AQ:CA").EntireColumn.Clear 这句,貌似可以跑出想要的结果,但是加上这句一跑就出问题。请高手看下!
附上表格的附件,附件在后面。
Sub TEST111()
'
' TEST Macro
'

'
    Dim WSD As Worksheet
    Dim PTCache As PivotCache
    Dim PT As PivotTable
    Dim PRange As Range
    Dim FinalRow As Long
    Dim FinalCol As Long
    Dim I As Integer
    Dim S As String
   
    For Each WSD In Worksheets '在表格内循环所有sheet
   
    '匹配sheet名字
    For I = 1 To 7
    S = CStr(I)
    If WSD.Name = "S" Then
    Set WSD = Worksheets("S")
    End If
    Next
   
   
    ' 定义输入数据以及数据源
    FinalRow = WSD.Cells(Application.Rows.Count, 1).End(xlUp).Row
    FinalCol = WSD.Cells(1, Application.Columns.Count).End(xlToLeft).Column
    Set PRange = WSD.Cells(1, 1).Resize(FinalRow, FinalCol)
    Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=PRange.Address)
        
    ' 创建数据透视表
    Set PT = PTCache.CreatePivotTable(TableDestination:=WSD.Cells(2, FinalCol + 6))
   
    With PT.PivotFields("PLINE")
        .Orientation = xlColumnField
        .Position = 1 'PLINE作为列标签放在第一列
    End With
    With PT.PivotFields("PMODLE")
        .Orientation = xlDataField
        .Function = xlCount
        .Position = 1
        .NumberFormat = "#,##0"
      
    End With
    With PT.PivotFields("是否过保")
        .Orientation = xlRowField
        .Position = 1 '是否过保作为行标签,放在第一行
        .PivotItems("否").Visible = False
        .PivotItems("#NUM!").Visible = False
        .PivotItems("#VALUE!").Visible = False
    End With
    With PT.PivotFields("PTYPE")
        .Orientation = xlRowField
        .Position = 2
    End With
    With PT.PivotFields("PMODLE")
        .Orientation = xlRowField
        .Position = 3
    End With
    Range("H2").Select '选择起始坐标;
   
    Next

End Sub
回复

使用道具 举报

 楼主| 发表于 2012-12-24 20:45 | 显示全部楼层
此工作表里面4个sheet,每个sheet提取100条作为样本。

新建 Microsoft Excel 工作表.rar

3.43 KB, 下载次数: 8

工作表

回复

使用道具 举报

 楼主| 发表于 2012-12-26 17:05 | 显示全部楼层
自己顶一下,请坛子里的高手帮忙看看呀!
回复

使用道具 举报

发表于 2012-12-27 12:08 | 显示全部楼层
apple_orange 发表于 2012-12-24 20:45
此工作表里面4个sheet,每个sheet提取100条作为样本。

透视表已经插入到 每个表的 h2  单元格了
透视表的名称是 透视表& 工作表名称

  1. Sub cc()
  2. Dim Sh As Worksheet
  3.   For Each Sh In Worksheets
  4.      ActiveWorkbook.PivotCaches.Create(1, Sh.Range("A:E"), 1).CreatePivotTable Sh.Range("H2"), "透视表" & Sh.Name, , 1
  5.   Next
  6. End Sub
复制代码
要显示什么样的数据,你自己拖几下拉几下就对了
回复

使用道具 举报

 楼主| 发表于 2012-12-27 16:57 | 显示全部楼层
试一试,这个貌似更简单呀!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-17 13:14 , Processed in 0.143840 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表