Code VBA check 1 Table Query đã refresh xong mới thực hiện lệnh tiếp theo.

Liên hệ QC

Trung Hiếu

Thành viên mới
Tham gia
26/5/18
Bài viết
5
Được thích
1
Morning các bác, như tiêu đề thì em đang có 1 sub thực hiện lệnh refesh Pivot table A sau đó copy data trên Pivot table A ra báo cáo. Pivot Table A thì đang lấy nguồn từ 1 Table Query B cho nên trước khi refesh Pivot Table A thì em sẽ có lệnh refresh Table Query B trước.
Vấn đề phát sinh là VBA và power query có vẻ không hoạt động tuần tự với nhau. Khi Table query B vừa được chạy lệnh Refresh và đang load thì VBA tiếp tục lệnh Refresh Pivot table A.
--> Kết quả là data copy từ data pivot table A thường ko chính xác hoặc lỗi Sub vi table query B refresh xong cũng mất 5-10s. Mình đã thử dùng lệnh Application.Wait, tìm hiểu 1 số code Afterfresh, Refesh của Querytable Method & Properties nhưng chắc do trình gà nên chưa ra được cách xử lý.
--> Giải pháp mong muốn: Bác nào biết cách khắc phục trường hợp này mách em với. Ví dụ có code để check trạng thái Refesh của Table query B done thì mới tiếp tục lệnh Refesh Pivot table A.

Ví dụ:

Sub Export_RP()
Thisworkbook.Sheets("sheet1").Range("Table query B").ListObject.QueryTable.Refresh BackgroundQuery:=False
Thisworkbook.PivotTables("Pivot table A").PivotCache.Refresh
End sub
 
Cái bạn đang dùng là QueryTable, không phải Power Query.

Power Query là một thế giới khác.
Vâng nhưng Querytable này được export ra từ Powerquery bác a. Đại khái là Trên power query em sẽ lấy data từ các file excel khác về xào nấu rồi export ra cái querry table đó.
 
Cái này mình đã có gặp và đã giải quyết được, đây là câu lệnh mình dùng để refresh toàn bộ bảng Pivot và Query (Data của Pivot là Query)

Sub Refresh_All_Data_Connections()
Dim objConnection, bBackground
For Each objConnection In ThisWorkbook.Connections
'Get current background-refresh value
bBackground = objConnection.OLEDBConnection.BackgroundQuery

'Temporarily disable background-refresh
objConnection.OLEDBConnection.BackgroundQuery = False

'Refresh this connection
objConnection.Refresh

'Set background-refresh value back to original value
objConnection.OLEDBConnection.BackgroundQuery = bBackground
Next
ThisWorkbook.RefreshAll
End Sub


Bạn thử xem nha, mấu chốt giải quyết vấn đề của bạn nằm ở hàng mình tô đậm nha, chúc bạn thành công.
 
Web KT
Back
Top Bottom