3

これが私の問題です。すべてのコード、すべての変更、すべてのタイプが機能しません。職場で Office 360​​ (最新) を使用しているため、Excel 2016 と VBA 7.1 です。

私が目指しているのは、シフト終了レポートを自動化することです。プロセスは次のとおりです。

1時間ごとにExcelシート(ログ)にデータを入力します。1 日の終わりの午前 5 時に、そのログを保存して閉じ、データをパワー ピボットにインポートする別の Excel シートを開き、それをピボットテーブル (上司用に印刷するための書式設定) に表示します。フィルタードロップダウンを使用して前の日付のフィルターを作成し、それを印刷します。これは、2 つのピボットテーブルと 1 つのピボットグラフの 3 つのレポートで行います。Power Pivot は、ログ シートからすべてのデータをインポートして、印刷用に再フォーマットします。

ログの自動保存、ログのクローズ、レポート ワークブックのオープン、データの更新、データの印刷、レポートのクローズの自動化プロセスのコードを取得して書き直すことに成功しました (初心者向け)。私が今欠けている唯一の部分は、自動フィルタリングです。

私が試したコードは膨大ですが、最近試したものの例を次に示します (非常に多くのコードを消去して再コピーしました...)

Sub Filter_PivotField()
'Description: Filter a pivot table or slicer for a specific date or period
'Source: excelcampus.com/vba/filter-pivot-table-slicer-recent-date-period

Dim sSheetName As String
Dim sPivotName As String
Dim sFieldName As String
Dim sFilterCrit As String
Dim pi As PivotFields

    'Set the variables
    sSheetName = "EOS Report"
    sPivotName = "PivotTable1"
    sFieldName = "Date"
    sFilterCrit = "xlDateYesterday"
    'sFilterCrit = ThisWorkbook.Worksheets("EOS Report").Range("O1").Value
    
    With ThisWorkbook.Worksheets(sSheetName).PivotTables(sPivotName).PivotFields(sFieldName)
        'Clear all filter of the pivotfield
        .ClearAllFilters
        
        'Loop through pivot items of the pivot field
        'Hide or filter out items that do not match the criteria
        For Each pi In .PivotFields
            If pi.Name <> sFilterCrit Then
                pi.Visible = False
            End If
        Next pi
        
    End With

End Sub

無駄に....

手動フィルターを実行するマクロを記録すると、次のようになります。

Sub manualfilter()
'
' manualfilter Macro
'

'
    ActiveSheet.PivotTables("PivotTable1").PivotFields( _
        "[Bi-Hourly Report].[Date].[Date]").VisibleItemsList = Array( _
        "[Bi-Hourly Report].[Date].&[2016-09-28T00:00:00]")
End Sub

しかし、記録したばかりの同じマクロを再実行しようとすると失敗します (日付を元に戻した後)。複数選択オプションなどを有効または無効にしました。

言うまでもなく、グラフを自動フィルター処理しようとするのは悪夢です。調べてもあまり出てこない。

フィルター ボタンの画像を次に示します。これは、私が調査したほとんどすべてが、ピボットテーブルを使用したフィルター自体ではなく、テーブルの COLUMN を並べ替えることであるためです。

テーブル フィルター

チャート フィルター

会社の所有物であるため、実際の Excel スプレッドシートを投稿することはできませんが、必要に応じて、誤ったデータを使用して形式を複製できます。

4

1 に答える 1

2

これをチェックしてください。

Dim prev_date As String

prev_date = Month(Date - 1) & "/" & Day(Date - 1) & "/" & Year(Date - 1)
Thisworkbook.Sheets("Sheet1").Activate 
'change this line with your sheet where pivot table is present. Change Sheet name.
ActiveSheet.PivotTables("PivotTable1").RefreshTable
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").CurrentPage = prev_date
于 2016-10-01T06:58:28.267 に答える