
PowerQueryでCSVを取り込んだので、
同じファイル名のCSVを差し替えればシート内のデータが変わるようにしています。
そのデータシートからピボットで集計もしています。
ただ、以下の操作が毎回手作業なので
・データメニューから「すべて更新」
・ピボット上で右クリック→更新
これを自動化させたく、以下のソースで「更新」ボタンを作りました。(マクロの記録で作成)
----------
Sub クエリとマクロ更新()
ActiveWorkbook.RefreshAll
ActiveSheet.PivotTables("ピボットテーブル2").PivotCache.Refresh
End Sub
----------
しかし、1回クリックするとCSVは更新されるようですが、ピボットの更新がされず、
もう1回クリックするとピボットの中身が更新されます。
結局、上記で作成した「更新」ボタンを2回押さないと目的が達成されません。
何が原因でしょうか?
1回で、クエリーの更新及びピボットの更新を出来ないでしょうか?
また、何もボタンを押さずにマクロブックを開いたら自動更新は出来ないでしょうか?
(読み込み時間が多くなるなら手動で行います)
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>また、何もボタンを押さずにマクロブックを開いたら自動更新は出来ないでしょうか?
これは、Workbook_Openなどに記述(からCall)すれば良いように思いますが、試していません。
一応、該当クエリ、ピボットのみを更新する場合は、下記のような感じでOKかと
Sub Refresh_Query_Pivot()
Dim tmp As Boolean
With ActiveWorkbook.Connections("クエリ - xxx")
tmp = .OLEDBConnection.BackgroundQuery
.OLEDBConnection.BackgroundQuery = False
.Refresh
.OLEDBConnection.BackgroundQuery = tmp
End With
Worksheets(1).PivotTables("yyy").PivotCache.Refresh
End Sub
Worksheets(1) Workbook_Open時にActiveSheetになっている保証がないのでシートをインデックスで指定していますが、(1)は仮定、不具合がある場合は、対象シートを.ActivateでActiveSheetにしてCallするのが良いと思います。
xxx , yyyは、対象の名前です。
No.2
- 回答日時:
こんにちは
接続プロパティなど不明な点もありますが、自身の探求の為、事象を探すと
下記のような記事を見つけました。
バックグラウンドリフレッシュの設定に原因があるようですが、
上記サイト内のサンプルコードで、実験したところ期待する結果を得られそうです。
詳細に付いては、参考サイトをご覧ください。
抜粋コードです。
Dim objConnection As Object
Dim bBackground As Boolean
For Each objConnection In ThisWorkbook.Connections
bBackground = objConnection.OLEDBConnection.BackgroundQuery
objConnection.OLEDBConnection.BackgroundQuery = False
objConnection.Refresh
objConnection.OLEDBConnection.BackgroundQuery = bBackground
Next
ActiveSheet.PivotTables("ピボットテーブル2").PivotCache.Refresh
実行内容
すべての接続をループ
BackgroundQueryを取得し保管
BackgroundQueryを Falseに設定
Refreshを実行
BackgroundQueryを保管値で元に戻す
ループ
PivotCache.Refresh
終了
No.1
- 回答日時:
DoEvents 関数を挟んだら、うまくいきませんかね?
以下の様に「DoEvents」を間に入れたのですが駄目でした。
ActiveWorkbook.RefreshAll
DoEvents
ActiveSheet.PivotTables("ピボットテーブル2").PivotCache.Refresh
やはり2回目に押すた時にピボットが更新されます。
代わりにMsgBox表示を挟ん出も駄目でした。
OKを押すまでステータスバーに「バックグラウンド クエリを実行しています」が出たままで進んでないようなので、中断しちゃってるようです。
OKを押すと完了するようで、やはり2回目の実行でピボットが更新されました。
バックグラウンド クエリーが完了するまで待機できると良さそうですが、
まだ方法が分かりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
マクロで、次のコードへ行く前に時間をおくにはどうしたらいいのでしょうか?
その他(Microsoft Office)
-
VBAマクロ実行時エラーの修正について
Visual Basic(VBA)
-
Excelでのバックグラウンドで更新とは
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
外部データの更新がうまくできません(Excel VBA)
Visual Basic(VBA)
-
6
エクセルで参照しているデータを常に最新の状態にしたい
Excel(エクセル)
-
7
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
8
Refreshで落ちる
Visual Basic(VBA)
-
9
ファイルを処理中に次の処理に移ってしまうようなのですが、、
Visual Basic(VBA)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
ブックのピボットを別ブックにコピーして自動更新したい
Excel(エクセル)
-
12
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
13
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
14
VBAで「クエリと接続」の画面を出せますか?
Excel(エクセル)
-
15
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
16
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
17
Excel VBAからAccessマクロを実行したい
Visual Basic(VBA)
-
18
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
19
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
20
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
ピボットグラフの書式の固定に...
-
5
エクセルでツールバーに「縮小...
-
6
どのドキュメントは暗号化され...
-
7
エクセルのストップウォッチ
-
8
別ブックからユーザーフォーム...
-
9
最初の1回のみにボタンクリッ...
-
10
エクセルで「ODBC Microsoft Ac...
-
11
エクセルマクロのグラフ操作
-
12
VBAを使ってエクセルシート...
-
13
cellsで特定の離れた範囲を選択...
-
14
hostent.h_addrの説明URL
-
15
ワードで選択範囲だけの改行を...
-
16
Excelのラジオボタンにチェック...
-
17
VBからPowerPointのマクロを実...
-
18
ExcelのVBAでWordの書式を変更...
-
19
エクセルVBAで新規シートにマク...
-
20
エクセル終了時の保存確認メッ...
おすすめ情報
公式facebook
公式twitter