遍历数据透视表,并将每个字段的详细信息与字段名称一起保存在单独的工作簿中

时间:2018-08-22 18:21:21

标签: excel vba split pivot-table

我正在Excel中的一个项目上工作,在该项目中,我有一个数据透视表,其中包含人们的姓名及其相关声明。我需要双击表中的每个名称,然后在单独的工作表中显示详细信息(索赔详细信息)时,将该工作表另存为单独的工作簿,并将该人的名字保存在文件夹中。有什么办法可以在VBA中自动执行此过程?

我有下面的代码可用于第一项,但有一些问题:

-工作表和工作簿的名称是硬编码的,因此仅适用于第一项。无论如何,有没有只是选择新的表而不是按名称选择它?有没有一种方法可以使用项目名称代替Book3.xlsx?

这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    app:layout_scrollFlags="scroll|enterAlways"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_collapseMode="pin"
            app:layout_scrollFlags="enterAlways|scroll" />

    </android.support.design.widget.AppBarLayout>

    <!--<include layout="@layout/content_main" />-->

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/main_container"
        android:background="@color/colorPrimary"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <!-- Your content here -->
            </LinearLayout>
        </android.support.v4.widget.NestedScrollView>
    </FrameLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

谢谢您的帮助!

*编辑:这是解决方案后的代码。

Sub IndividualReports()

Application.ScreenUpdating = False
On Error Resume Next

Dim LastRow As Long

Sheets("Table").Select

  With Application.ActiveSheet
      LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
  End With

For i = 8 To LastRow
  Range("C" & i).Select
  Selection.ShowDetail = True
  Sheets("Sheet2").Select
  Sheets("Sheet2").Move
  Sheets("Sheet2").Select
  ChDir "C:\Users\haghigy\Desktop\New3"
  ActiveWorkbook.SaveAs Filename:="C:\Users\haghigy\Desktop\New3\Book3.xlsx", _
      FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Next

End Sub

1 个答案:

答案 0 :(得分:0)

一个好的开始!我注意到了几件事。首先,当您将明细表移动到新工作簿并另存为时,带有“数据透视表”的工作簿不再是活动工作簿。因此,在新工作簿上选择范围将无效。您可以添加

QueuedTaskScheduler

到循环顶部。此外,

Workbooks("[WorkbookName].xlsx").Activate
Sheets("Table").Activate

不需要两个Select方法,并且工作表编号将增加,因此它并不总是为Sheet2。您可以将上面的代码替换为:

Sheets("Sheet2").Select
Sheets("Sheet2").Move
Sheets("Sheet2").Select

最后,您必须更改要保存的工作簿的名称,这样它不会每次都被覆盖。也许像:

ActiveSheet.Move

然后它应该工作。

* edit:也不是真的需要ChDir