2017-01-05 1 views
1

したがって、パラメータを持つmsクエリがあります("qry_Accounting"と呼ぶことにします)。コンボボックス。こうすることで、データをコンボボックスでフィルタリングできます。パラメータを使用してmsクエリにリンクされたピボットテーブルを更新するときの古いデータ

次に、msクエリに基づいてピボットテーブルを作成しました。通常、コンボボックスで選択したアイテムにリンクされたデータを見ることができます。コンボボックスで選択したアイテムを変更すると、データが"qry_Accounting"に変わることがわかります。ボタンを作成しなければならなかったので、選択したアイテムを変更してボタンをクリックすると、ピボットテーブルが更新されます。

私の問題は、私のピボットテーブルに以前選択されたアイテムのデータと、そのデータだけです。私は本当に何が起こるかを理解していません。新しいピボットテーブルを作成すると正しいデータが得られますが、項目を変更してもその動作は継続しますが、以前のデータは常に保持していますが、新しいデータは取得しません。

もう1つ、手動でテーブルを更新すると機能します。複数のピボットテーブルが同じqry_Accountingテーブルにリンクされている場合、そのテーブルの1つをリフレッシュするときにも機能します。

いつでも手動で更新するようにユーザーに依頼せずに正しいデータを表示するにはどうすればよいですか?

PS:既に「フィールドごとに保持するアイテムの数」のプロパティを「none」に変更しました。ここにコメント内のいくつかの質問に続いて

(コンボボックスの変更を適用するには、ボタンをクリックすると)私のコードの詳細です:

Sub Button5_Click() 

    'If the buffer place (O4) is different from the combo linked cell (F4) then  
    'assign the value from F4 to O4. 
    'the table will then be updated because as soon as O4 value changes the  
    'table is updated (the parameter is taken from O4) 

    If Sheets("base_pivot").Range("O4").Value <> Sheets("base_pivot").Range("F4").Value Then 
     Sheets("base_pivot").Range("O4").Value = Sheets("base_pivot").Range("F4").Value 
     'We wait 5 seconds to avoid access denied problems 
     Application.Wait (Now + #12:00:05 AM#) 
     'we ask for a refresh of the pivot tables explicitely 
     RefreshPivotTables ActiveWorkbook 
     'we ask for a refresh of all data. 
     ActiveWorkbook().RefreshAll 
    End If 

End Sub 

サブRefreshPivotTablesコード

Sub RefreshPivotTables(wb As Workbook) 

    Dim ws As Worksheet 
    Dim pt As PivotTable 
    Dim pi As PivotItem 
    Dim pf As PivotField 

    For Each ws In wb.Worksheets 
     For Each pt In ws.PivotTables 
      pt.PivotCache().Refresh 
      pt.RefreshTable 
     Next 
    Next 
End Sub 

それ以外はすべて自動です。 msクエリにはパラメータがあるため、O4値が更新されるとすぐに新しいデータがテーブルにロードされます。 それでは、枢着座をリフレッシュするための唯一のことです。

+0

を学びました'PivotCache'を更新するには、' PivotCache'を新しい "Data-Range"で更新し、 'pt.RefreshTable'を使う必要があります。 –

+0

Hey There Shai Rado、あなたの答えに感謝します。私はオンラインでチェックし、マイクロソフトによると、これは読んだだけです。 https://msdn.microsoft.com/en-us/library/office/ff834938(v=office.15).aspx –

+0

読み取り専用とは何ですか?ピボットキャッシュ? –

答えて

0

私はあなたのクエリ(「Table_edu_ana_invoices_query4」)を持っていないので、私はアクセスDBを使用して以下のコードをテストし、ちょうど(あなたがコードで表示されます以下のコードでクエリを書きましたコメント)。

クエリセクションを必要に応じて変更する方法を理解していれば教えてください。私はそれがMSクエリでは動作しない可能性があるので

コード

Sub RefreshPivotTables(wb As Workbook) 

Dim ws As Worksheet 
Dim pt As PivotTable 
Dim ptCache As PivotCache 
Dim pi As PivotItem 
Dim pf As PivotField 

Dim con As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Dim cmdCommand As ADODB.Command 

'===== modify here to put your Connection String to your DB ===== 
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Radoshits\Desktop\Database11.accdb" 

'===== this is the String query I am using >> replace with yours ===== 
rs.Open "SELECT * FROM Table1", con, adOpenStatic, adLockReadOnly 

For Each ws In wb.Worksheets 

    For Each pt In ws.PivotTables 
     ' update Pivot Cache with Query settings 
     With pt.PivotCache 
      Set .Recordset = rs 
      .Refresh 
     End With 

    Next pt 
Next ws 

Set rs = Nothing 
con.Close 
Set con = Nothing 

End Sub 
+0

ねえ、コードをありがとう。試してみましたが、 "Set .recordset = rs": "ランタイムエラー '-2147417848(80010108)':オートメーションエラーです。呼び出されたオブジェクトはクライアントから切断されています。私はレコードセットをテストし、それが動作すると、私はそれをナビゲートすることができます。しかし、ピボットキャッシュは、レコードセットプロパティをアクティブにしていないようです(ピボットキャッシュのウォッチを使用すると、レコードセットに「アプリケーション定義またはオブジェクト定義エラー」が表示されます)。 –

+0

@Bencorrはupvoteを自由に感じます:) –

+0

ウェブサイト上で全く新しいです、そして、それは私が思う15点を持っているujntilに現れないようです。 –

0

だから最後に私は、私は物事を行う方法を変更しました。私は今、エクセル2016クエリとパラメータを使用しています。ファイルは大きく、速度は遅いですが、動作します(データに100k行以上あります)。私はテーブルをフィルタリングするためにスライサーを使用しています。私はVBAを使用して、スライサー値をコンボボックスの値に更新しています。この方法では、ピボットテーブルは常に正しいデータを取得します。それは少なくとも私はこの経験から得ているパラメータでMSクエリを使用してピボットテーブルに問題があるようです。私はおそらく別の書類で今後もやり直していくつもりです。あなたの助けシャイラドーのため

おかげで、私はあなたが `PivotTable`のために** **「中の人」に欠けている、そしてそれはだかなりの数の事ピボットテーブルとそのキャッシュ:)

関連する問題