マクロを実行してワークブックを保存するときに、マクロが接続テーブルやピボットテーブルを適切にリフレッシュしないという問題があります。コードがさらに移動する前に接続とピボットテーブルの更新を完了する方法
backgroundquery = false(これはMicrosoft Scripting Runtimeが参照に追加されていても動作しませんでした)とさまざまなタイプの更新が設定されましたが、まだ問題は残ります。 接続は、別のブックのシートにリンクされた単なるテーブルです。
ここで(両方が大きくルーチン、これ民間潜水艦の一部である)を保存ワークブックによって、後に続いているリフレッシュのための私のコードです:リフレッシュを確保する方法上の任意のアイデアが
Private Sub RefreshPivotTables()
Dim WkC As PivotTable, WkAC As PivotTable
Set WkC = ThisWorkbook.Worksheets("Contracts").PivotTables("Contracts")
Set WkAC = ThisWorkbook.Worksheets("All Contracts").PivotTables("All Contracts")
ThisWorkbook.Connections("Contracting Expiry Report Master File").Refresh
'Reading about it, I was using both Refresh Table and Cache Refresh together with Update thinking it might help
With WkC
.RefreshTable
.PivotCache.Refresh
.Update
End With
With WkAC
.RefreshTable
.PivotCache.Refresh
.Update
End With
End Sub
Private Sub SaveWorkbookNewMonth()
Dim dt As String
dt = Format(CStr(Now), "mmmm yyyy")
ThisWorkbook.SaveAs Filename:="C:\Users\" & Environ$("username") & "\Desktop\Expiry Report Aviation, Asphalt, BS and International Marine - " & dt & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
されますコードを前進させずに完成させていただければ幸いです。
EDIT:
最後にバックグラウンドクエリが解決し、それが原因で保護されたブックに働いていなかったことに気づきませんでした。
新しい作業コード:
Private Sub RefreshConnectionAndPivotTables()
Dim WkC As PivotTable, WkAC As PivotTable
Set WkC = ThisWorkbook.Worksheets("Contracts").PivotTables("Contracts")
Set WkAC = ThisWorkbook.Worksheets("All Contracts").PivotTables("All Contracts")
ThisWorkbook.Protect Password:="pass", Structure:=False, Windows:=False
ThisWorkbook.Connections("Contracting Expiry Report Master File").OLEDBConnection.BackgroundQuery = False
ThisWorkbook.Connections("Contracting Expiry Report Master File").Refresh
ThisWorkbook.Connections("Contracting Expiry Report Master File").OLEDBConnection.BackgroundQuery = True
ThisWorkbook.Protect Password:="pass", Structure:=True, Windows:=True
DoEvents
WkC.RefreshTable
WkAC.RefreshTable
End Sub
ちょうど試してみましたが、接続のリフレッシュの後、そしてピボットテーブルをリフレッシュした後に 'DoEvents'を追加しましたが、役に立たなくなりました。あなたがリンクしている他の投稿も読んだが、DoEventsは機能していないと言っていたので、今まで自分で試していなかった。 –
投稿のリマインダーをありがとう、もう一度やり直してみて、私のバックグラウンドクエリが最初はうまくいかなかった理由を見つけました。 DoEvents自体は動作していないようだが、バックグラウンドクエリを無効にすることと組み合わせると、そのトリックを行うようだ。 –