【发布时间】:2018-05-29 15:16:46
【问题描述】:
所以,我有一个数据透视表,我将其命名为“CSRTable”,因为我没有创造力。在这个数据透视表上,它有一个销售代表(称为 csr_name 的字段)在一组周(称为 WeekEnding 的字段)内的销售图表
这是数据透视表,数据来自“Sale Raw”选项卡,即 VBA 中的 Sheet3:
这就是我的简单数据透视表。问题是什么,我的老板给了我一个指令:打印一次,它会为给定的 WeekEnding 打印我们所有的“csr_name”。
我不熟悉如何做到这一点,我知道有一种 VBA 方法,但我还没有找到一种我能够工作的方法,这是我唯一找到的一种方法:
Sub LoopField()
Dim pivF As PivotField
Dim pivI As PivotItem
Set pivF = ActiveSheet.PivotTables("CSRPivot").PivotFields("csr_name")
Application.ScreenUpdating = False
For Each pivI In pivF.PivotItems
pivF.CurrentPage = pivI.Name
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
Next pivI
'Clear filer
pivF.ClearAllFilters
Application.ScreenUpdating = True
End Sub
但这不起作用,它只打印一个(在本例中为 Acevedo)。
因此,他想更改 CSR_NAME,而不是 WeekEnding,并将它们中的每一个都打印在不同的页面上。如果 VBA 意外正确,这里是它的位置,当我选择数据透视表并按 Alt+F11 时
根据我在 cmets 中的 QHarr,
Option Explicit
'Requires all items selected
Sub GetAllCSRItems()
Const filePath As String = "C:\Users\User\Desktop\" 'save location for new files
Dim wb As Workbook
Dim ws As Worksheet
Dim pvt As PivotTable
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet2")
Set pvt = ws.PivotTables("CSRPivot")
Application.ScreenUpdating = False
Dim pvtField As PivotField
Dim item As Variant
Set pvtField = pvt.PivotFields("csr_name")
pvtField.ClearAllFilters
pvtField.CurrentPage = "(All)"
For Each item In pvtField.PivotItems
item.Visible = True
Next item
pvt.ShowPages "csr_name"
For Each item In pvtField.PivotItems
Dim newBook As Workbook
Set newBook = Workbooks.Add
With newBook
.Worksheets(1).Name = item.Name
wb.Worksheets(item.Name).UsedRange.Copy
Worksheets(item.Name).Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
.SaveAs Filename:=filePath & item.Name & ".xlsx"
.Close
End With
Set newBook = Nothing
Next item
Application.DisplayAlerts = False
For Each item In pvtField.PivotItems
wb.Worksheets(item.Name).Delete
Next item
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
进入
仍然没有从这个结果中得到任何结果
【问题讨论】:
-
我在这里的回答stackoverflow.com/a/49105924/6241235 可能会有所帮助,或者这个stackoverflow.com/questions/50429986/… 基本上这些演示了有效的 showPages 方法以及一种迭代每个选择的解决方案。
-
@QHarr 如果这些有效,当我将它们放入我的工作表时,我无法让他们做任何事情。我当然已经更新了信息以匹配我的工作表,但仍然无法进行任何工作。
-
csr_name 必须位于 showPages 方法的页面字段中。我向您保证,这些工作是在与它们相关的问题上下文中进行的。
-
ActiveSheet.PivotTables("CSRPivot").ShowPages "csr_name" 确保在右侧工作表中运行,并且在页面字段区域中使用 csr_name。
-
请不要在 cmets 中发布代码。它难以辨认,cmets 可能会消失。 showPages 没有循环。该命令是我在上面给出的单行... ActiveSheet.PivotTables("CSRPivot").ShowPages "csr_name"
标签: excel pivot-table