excel - VBA 将数据透视表的“.ShowDetail”保存到单个工作簿
问题描述
我有一个包含客户列表的 Excel 项目。每个客户每年都有一个总支出,每当我点击每个客户的每一年时,它都会打开一个包含该年信息的动态表。相反,我想为每个客户将结果导出到不同的 excel 文件中。
我见过其他人有同样的问题,但仍然不明白出了什么问题。我没有使用 VBA 的经验,我正在帮助一个朋友,所以也许这是一些我不知道的基本知识。该错误与 ShowDetail 和单元格有关,它可能无法捕获循环中的内容。
Sub Reports()
Dim i As Double
Dim Ini As Double
Dim Fin As Double
Application.ScreenUpdating = False
Sheets("MainTable").Select
With Sheets("MainTable")
Ini = Columns(1).Range("A2").End(xlDown).Row
Fin = .PivotTables(1).PivotFields("Name").VisibleItems.Count
For i = 1 To Fin
.Cells(i + Ini, 2).ShowDetail = True
Sheets(1).Name = .Cells(i + Ini, 1).Value
ActiveSheet.Select
ActiveSheet.Move
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & ActiveSheet.Name
ActiveWorkbook.Close False
Next i
End With
Application.ScreenUpdating = True
End Sub
我希望这可以为每个客户将结果导出到不同的 excel 文件中。
提前致谢!
解决方案
问题:
- 第一个是对其值设置为的单元格的错误引用
.ShowDetails
- 然后它会
Sheet(1)
在循环中每次重命名。
代码:
Sub Reports()
Dim i As Double
Dim Ini As Double
Dim Fin As Double
Dim wb As Workbook: Set wb = ThisWorkbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Sheets("MainTable")
Ini = .Columns(1).Range("A2").End(xlDown).row
Fin = .PivotTables(1).PivotFields("Name").VisibleItems.Count
For i = 1 To Fin
.Cells(i + Ini - Fin - 1, 2).ShowDetail = True
ActiveSheet.Name = .Cells(i + Ini - Fin - 1, 1).Value & .Cells(Ini - Fin - 1, 2).Value
ActiveSheet.Move
ActiveWorkbook.SaveAs fileName:=ThisWorkbook.path & "\" & ActiveSheet.Name
ActiveWorkbook.Close False
Next i
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
代码将在 Pivot 上工作,该 Pivot 开始于A2
并看起来类似于
您可以为其他年份创建另一个循环。作为示例,我创建了这个简短的 Pivot。
推荐阅读
- r - 使用 knitr 和 read.csv 处理 data.frame(..., check.names = FALSE) 中的错误
- office365 - 在 Microsoft Bookings 中创建联系人失败
- javascript - 在 Rails 中的超薄模板内将字符串传递给 javascript 脚本
- c++ - 将数组指针返回给 Python 时出错
- prolog - 在 Prolog 中检索术语的内部/规范表示
- javascript - React 单元测试匿名函数
- scala - 使用 flatMap 在 scala 中展平 List[Any]
- vue.js - Vuejs:类在模板中没有按预期工作
- javascript - 没有使用backbone.js第二次调用函数
- css - 使用 flexbox 水平滚动页面