Excel vba 새로 고침 대기
버튼 하나를 클릭하면 해당 시트에 있는 쿼리 테이블이 새로 고쳐지는 코드를 만들고 있습니다.
문제는 새로 고침 후에 일부 정보를 복사하는 코드가 더 있다는 것입니다. 하지만 이 코드는 새로 고침이 시작된 직후에 실행되고 정보는 아직 교체되지 않았습니다.
새로 고침이 완료된 후 나머지 코드를 계속할 수 있는 대기 기간을 만들고 싶습니다.
인터넷 속도 등에 따라 너무 오래 기다리거나 너무 짧지 않게 5초만 기다리는 것이 아니라 상쾌한 시간을 보내고 싶습니다.
어떻게 해야 하나요?
편집:
단순 코드:
ActiveWorkbook.RefreshAll
모든 새로 고침이 완료될 때까지 지연 또는 대기 코드가 필요합니다.그리고나서
MsgBox("The Refreshing is Completed!")
그 방향으로 뭔가.하지만 실제로 완료되기 전에 메시지 상자를 말할 수 없습니다.인터넷 속도에 따라 새로 고침 시간이 짧거나 길어질 수 있으므로 실제 새로 고침 시간의 변수가 되었으면 합니다.
PowerPivot 모델로 작업 중이었는데 모델을 저장하고 닫기 전에 데이터를 새로 고치고 싶었습니다.그러나 Excel은 새로 고침이 완료되기 전에 모델을 닫았고 모델을 열 때 다시 새로 고침을 시작했습니다.
RefreshAll 메서드 직후에 다음 행을 추가하면 효과가 있습니다.
ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
당신에게도 효과가 있기를 바랍니다.
속도를 높이려면 이벤트를 사용하지 않도록 설정해야 합니다.
Excel 2010을 사용하고 있습니다. 이전 버전에서도 이 방법을 사용할 수 있는지 잘 모르겠습니다.
웹 쿼리의 외부 데이터 범위 등록 정보에 원하는 효과를 얻으려면 선택 취소해야 하는 "백그라운드 새로 고침 사용"과 같은 확인란이 있습니다.
이 페이지 하단에서 사진을 확인하십시오. http://www.mrexcel.com/tip103.shtml
편집:
다음은 원하는 효과를 보여주는 두 개의 매크로입니다.
Sub AddWebquery()
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://de.selfhtml.org/html/tabellen/anzeige/table_tr_th_td.htm", _
Destination:=Range("$A$1"))
.Name = "table_tr_th_td"
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "1"
.Refresh BackgroundQuery:=False
End With
End Sub
Sub TestRefreshing()
Range("A1").Clear
ActiveWorkbook.RefreshAll
Debug.Print "Test: " & Range("A1").Value
End Sub
AddWebquery를 실행하여 쿼리를 추가한 다음 TestRefreshing을 실행하여 효과를 테스트합니다.할 수 ..BackgroundQuery = False
True
잘못된 결과를 초래할 수 있습니다.
10초 절전 상태의 테스트 페이지:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SO-Test</title>
</head>
<body>
<?php
sleep(10);
?>
<table border="1">
<thead>
<tr><th>1</th></tr>
</thead>
<tbody>
<tr><td>2</td></tr>
</tbody>
</table>
</body>
</html>
방금 비슷한 문제가 발생했는데 다음과 같이 해결했습니다.
For i = 1 To ActiveWorkbook.Connections.Count
ActiveWorkbook.Connections(i).OLEDBConnection.BackgroundQuery = False
'MsgBox ActiveWorkbook.Connections(i).OLEDBConnection.BackgroundQuery
Next
ActiveWorkbook.RefreshAll
모든 할 수 backgroundQuery
속성은 확실히false
새로 고침을 호출하기 전에
데이터 -> 연결 -> 정보에서 "백그라운드 새로 고침 사용" 선택을 취소합니다.
이렇게 하면 백그라운드에서 새로 고침이 비활성화되고 새로 고침이 완료될 때까지 기다립니다.
다음 방법을 사용해 보십시오.
With Selection.ListObject.QueryTable
.BackgroundQuery = False
.Refresh
End With
다음과 같이 설명하면 BackgroundQuery = False는 BackgroundQuery 속성을 False로 변경하지 않는 것 같습니다.
Selection.ListObject.QueryTable.Refresh BackgroundQuery = False ' doesn't work
스크립트를 vba에서 기다리게 하려면 sleep을 사용해야 합니다.하지만 가끔 엑셀 vba에서는 잠이 안 올 때가 있습니다.
http://99students.com/macro-sleep-vba/
그 시도 대신에
Application.Wait (Now + TimeValue("0:01:00"))
샘플 코드
Sub Setting_Sleep_Without_Sleep_Function()
MsgBox Now
Application.Wait DateAdd("s", 10, Now)
MsgBox Now
End Sub
또 다른 방법은 워크북을 사용하는 것입니다.명령을 열어 URL을 별도의 워크북으로 로드합니다.
그러면 통화가 완료된 후 바로 웹 요청의 데이터에 대한 전체 액세스 권한을 얻을 수 있습니다.또한 Excel은 웹 쿼리처럼 고정되지 않고 로드하는 동안 진행 표시줄을 표시합니다.
이 질문에 대한 내 대답을 참조하십시오.쿼리가 완료되었을 때 Excel 웹 쿼리에서 데이터를 후처리하려면 어떻게 해야 합니까?
이 접근 방식의 장점은 사용자가 직접 데이터 처리를 관리해야 한다는 것입니다. Excel은 해당 데이터를 지정된 대상에 저장하지 않습니다.
우리는 당신이 해온 것처럼 보이는 것과 꽤 비슷한 것을 시도한 후에 결국 이 길을 가게 되었습니다.
ActiveWorkbook.RefreshAll
Do While Application.CalculationState <> xlDone
DoEvents
Loop
오래된 질문인 건 알지만, 저한테는 효과가 있었어요.공식이 계산되는 동안 대기에도 사용할 수 있습니다.
'A.G로부터.Johnson@Live.com 2014-08-11 '완전한 제어가 가능한 간단한 버전이 있습니다.RefreshAll을 사용하는 대신 다음과 같은 서브루틴을 만듭니다. '실행할 곳이면 어디든 Exclude VBA에서 루틴을 호출하십시오.' 그러면 해당 루틴이 실행될 때까지 다른 작업이 수행되지 않습니다.'또 다른 이점은 피벗 테이블을 새로 고치지 않으므로 간섭하지 않는다는 것입니다. ' 새로 고친 데이터에 의존하는 피벗이 있는 경우 쿼리 새로 고침이 완료된 후 피벗에 대해 유사한 새로 고침 '을 실행할 수 있습니다.
sub RefreshQueries()
dim ws as worksheet
dim qt as QueryTable
For each ws in thisworkbook.worksheets
For each qt in ws.querytables
qt.refresh
next qt
next ws
end sub
언급URL : https://stackoverflow.com/questions/8925403/excel-vba-refresh-wait
'source' 카테고리의 다른 글
Excel 셀에서 선행 0의 자동 자르기를 방지하는 방법 (0) | 2023.05.01 |
---|---|
전역이 있는 디렉토리의 파일 목록 가져오기 (0) | 2023.05.01 |
자동 크기 조정 기능을 유지하여 WPF에서 텍스트를 회전하는 방법 (0) | 2023.05.01 |
깃 상위 포인터를 다른 상위 포인터로 설정 (0) | 2023.05.01 |
WPF 데이터 그리드 선택 행 클릭 이벤트? (0) | 2023.05.01 |