excel - 从数据透视表命名 showdetail 工作表时嵌套 For Loop 出牙问题
问题描述
我有一些代码可以做三件事......
- 显示每行的所有数据透视表行标签的详细信息
c
- 在行标签上命名包含显示详细信息数据的工作表。对于每个长
x
- 由于某些行标签超过 30 个字符 - 它使用一个
if
函数来检查行标签是否包含 30 个字符,然后将其削减,以便行标签名称可以适合。
但是,我遇到了一些初期问题……在显示第一行标签的详细信息后,它随后将第一张表命名为所有表的名称。我显然把我的循环搞混了,但我不确定我哪里出错了。有人可以建议吗?谢谢你。
Sub test()
Dim PivotSheet As Worksheet
Set PivotSheet = ActiveWorkbook.Worksheets("Pivot Table")
Dim c As Range, x As Long, lastrow As Long
lastrow = PivotSheet.cells.Find("*", cells(1, 1), xlFormulas, xlPart, xlByRows, xlPrevious, False).Row
With PivotSheet.PivotTables(1)
For Each c In .DataBodyRange.Resize(, 1)
c.ShowDetail = True ' shows details of pivot table row labels
For x = 6 To lastrow - 1
If Len(PivotSheet.cells(x, 1)) > 31 Then
ActiveSheet.Name = Left(PivotSheet.cells(x, 1), 30) ' names spreadsheet containing pivottable details depending on row label
Else
ActiveSheet.Name = PivotSheet.cells(x, 1)
End If
Next x
Next c
ActiveSheet.Move After:=Sheets(12)
End With
End Sub
解决方案
我认为您不需要内部循环(假设工作表标签与c
工作表的第一列来自同一行)
Sub test()
Dim PivotSheet As Worksheet, ws As Worksheet, wb As Workbook
Dim c As Range, x As Long, lastrow As Long
Set wb = ActiveWorkbook
Set PivotSheet = wb.Worksheets("Pivot Table")
lastrow = PivotSheet.Cells.Find("*", PivotSheet.Cells(1, 1), _
xlFormulas, xlPart, xlByRows, xlPrevious, False).Row
For Each c In PivotSheet.PivotTables(1).DataBodyRange.Columns(1).Cells
c.ShowDetail = True ' shows details of pivot table row labels
Set ws = ActiveSheet 'get a reference to the new sheet
ws.Name = Left(c.EntireRow.Cells(1).Value, 30) 'no need for a test here...
ws.Move After:=wb.Sheets(12)
Next c
End Sub
推荐阅读
- junit - 模拟挂起函数在 Mockito 中返回 null
- c# - 在 c# wpf 中创建自定义事件
- ssas - SSAS 是语义层吗?
- android - 在 Mainmodule 中包含 Submodule 资源并创建 aar 库
- database - 任何用于 Flutter 的持久性 NoSQL 数据存储?
- javascript - 处理多个数据时反应 native-redux 出错
- ibm-cloud - IBM Cloud 在中国可用吗?
- elasticsearch - 如何找到 inner_hits 计数为 N 的文档?
- installation - Anypoint Studio 问题
- python - 如何通过 Pandas 格式化工作表中的所有日期?