2016-11-22 6 views
1

그래서 나는 꽤 큰 Excel 시트를 사용하고 있습니다. 상당히 복잡한 기능을 많이 만들었습니다. 나는 그것이 Execute라고 말할 때 꽤 오랜 시간이 걸린다. 이제Excel VBA에서 루프 일시 중지/다시 시작

Screenshot of Counter

: 나는 그것이 온 과정에 운임 방법을 알려주는 타이머 (사진에 그림을) 만들었습니다. 나는 일시 정지 버튼을 만들고 싶습니다. 나는 다음과 같이 시도했다 :

Private Sub PauseButton_Click() 
Application.Wait Now() + TimeValue("00:00:20") 
End Sub 

실제로 프로세스를 일시 중지한다. 나의 초기 생각은 매우 큰 숫자를 입력 한 다음 버튼 클릭을 재개하는 것이었다. 불행히도 (S) 과정을 Excel에서 시작할 수 없으므로 입력 한 기간 동안 프로그램이 완전히 고정 된 것으로 보입니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으면 크게 개선 될 것입니다.

+0

"일시 중지"는 생각할 수있는 것처럼 쉬운 일이 아닙니다. 첫 번째 :'Application.Wait'은 항상 당신이 알아 차렸 듯이 애플리케이션을 정지시킬 것입니다. 원하는대로 수행하려면 하위를 건너 뛰거나 끝내고 다시 시작할 때 다시 시작해야합니다. 프로세스를 "재개"(단순히 시작 부분부터 시작하지 않음) 할 위치를 알려주는 하나 이상의 (전역/정적) 변수가 있으면 일시 중지의 "느낌"이 나타납니다. 하지만 코드의 큰 부분을 변경해야합니다. DoEvents 루프를 사용하여 일시 중지를 시뮬레이트 할 수는 있지만 시트가 0 % –

답변

2

글쎄, 우리가 양식의 코드를 볼 수 없다는 것에 대해서는 공개 부울 b_pause을 선언하면 일시 중지 여부를 알릴 수 있습니다. 그리고 다음과 같이 작성하십시오 :

public b_pause as boolean 

sub RunMe 
    b_pause = True 
    Do While b_pause 
     DoEvents 
    Loop 
End sub 

Sub StopMe() 
    b_pause = False 
End Sub 
+1

부터 시작하여 새로운 시트로 끝내려면 뭔가 충돌하려고하면 충돌이 발생할 수 있습니다. 귀하의 답변 주셔서 감사합니다! 그것은 좋은 의미, 나는 두 개의 대형 루프에 조건을 추가하고 각 반복 후 값을 확인하십시오. 하지만 공개 부울은 어디에서 선언해야합니까? 하위 모듈 (fx sub declarePublics)로 새 모듈에? – bgaard

+0

공용 변수는 함수 및 하위 외부에서 선언됩니다. 코드 작성 방법에 따라 모듈을 만들 때 공용 변수를 선언하고 모듈을 만들지 않는 것이 좋습니다. – Vityata

+1

그것은 매력처럼 작동합니다! 기능 RunMe 실제로 StopMe가 재개하는 동안 프로그램을 일시 중지합니다. 왜 그런지는 모르겠지만, 나는 모든 것을 점검하고, 솔직히 중요한 것은 그것이 작동한다는 것입니다. 그래서 많이 고마워! 그리고 누군가가이 게시물을 필요로한다면, 부울은'public b_pause as Boolean'으로 정의되어야합니다. 아무리 큰. – bgaard