2012-01-24 4 views
0

기존 코드를 수정하려고했지만 모든 것이 어디로 가야할지 모릅니다.다른 모듈과 함께 진행 막대를 동시에 실행할 수 있습니까?

사용자 폼을 만들었지 만 진행률 표시 줄에 레이블을 지정하는 대신 다른 모듈이 완료 될 때 업데이트 할 목록 상자로 설정했습니다.

Sub DoStuff() 

    Dim ufUpdate As UUpdate 
    Dim dtTime As Date 

    'instantiate the userform 
    Set ufUpdate = New UUpdate 

    'display a step 
    ufUpdate.ListBox1.AddItem "Updating Data1…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data2…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data3…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating Data…" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating …" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating …" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating …" 

    dtTime = Now 
    Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02") 
    ufUpdate.ListBox1.AddItem "Updating is COMPLETE!" 

    Unload ufUpdate 

    Set ufUpdate = Nothing 

End Sub 

나는 위의 코드의 각 목록 상자 항목에 상관 관계가 각 모듈을 실행하는 다른 모듈이 있습니다

나는 하나 개의 모듈에 다음 코드를 가지고있다. 위의 코드를 열고 실행하기 위해 userform을 얻을 수는 있지만 다른 모든 업데이트와 동시에 실행할 수는 없습니다.이 업데이트는이 목적을 완전히 무효로 만듭니다.

내가 가장 염려하는 부분은 다음과 같습니다. 각각의 코딩은 어디에 배치해야합니까? 아니면 데이터를 모듈을 업데이트하면서 동시에 실행되도록 어떻게 변경합니까?

두 번째 질문은 목록 상자 항목을 업데이트하면서 업데이트하는 것입니다. 이제 목록 상자가 단순히 "데이터를 업데이트 할 ..."항목을 만들고 목록 상자 항목에 "... 완료"를 추가하도록 업데이트를 추가하고 싶습니다. 상관 데이터 갱신이 완료 될 때 각 엔트리의 끝에서. 오히려 위의 코드에서 그것을 고집하는 것보다 각 데이터 모듈의 코드 모듈의 끝에서

ufUpdate.ListBox1.List(0) = "blah blah updating...Done." 

:

내가 좋아하는 뭔가를 시도했다. 이 작업이 가능합니까 아니면 다른 곳으로 이동합니까?

답변

1

가짜 업데이트 상태 모듈이 필요하지 않습니다. 실제 업데이트 프로세스를 실행하는 코드에 상태 업데이트를 추가하십시오. 업데이트를 실행하는 코드가 폼 자체에 없으면 일반적으로 폼에서 업데이트 프로세스를 사용할 공용 메서드를 두 개 만듭니다.

ufUpdate.AddStatus "Updating data 1..." 
Call UpdateData1 
ufUpdate.MarkAsDone 

ufUpdate.AddStatus "Updating data 2..." 
Call UpdateData2 
ufUpdate.MarkAsDone 
+0

이 잘 작동하는 것 같다 저장 : 실제로 당신이 다음을 수행 할 수있는 업데이트를하고 코드에서 다음

Public Sub AddStatus(sStatusMessage As String) Me.ListBox1.AddItem sStatusMessage DoEvents End Sub Public Sub MarkAsDone() With Me.ListBox1 .List(.ListCount - 1) = .List(.ListCount - 1) & " Done." DoEvents End With End Sub 

: 사용자 양식에

이 같은 간단한 일을 할 하나의 작은 문제. userform이 시작되면 이제는 아무 것도 표시되지 않고 userform이 열리고 모든 데이터가 업데이트되지만 userform istelf는 단지 흰색 (공백) 창이됩니다. – Jon

+0

또 다른 빠른 업데이트 : 분명히 또 다른 창을 클릭하면 userform과 listbox가 보입니다. 그러나 목록 상자에는 항목이 표시되거나 코드가 실행되는 동안 업데이트되지 않습니다. 듀얼 모니터를 실행하고 두 번째 모니터에서 무언가를 클릭했을 때만 발견되었습니다 ... 그래서 userform이 나오고 코드가 실행됩니다. 그러나 내가 선택한 Excel을 떠나면 userform이 빈 흰색 상자로 표시됩니다. 밖에서 뭔가를 선택하면 uf/lbox가 제대로 표시되지만 목록 상자에 업데이트가 표시되지 않습니다. * 어깨를 으깨기 * 스크린 업데이트를하는 것과 관련이 있습니까? – Jon

+0

화이트 박스 문제에 약간의 수정. 코드가 실행되는 동안 목록 상자와 uf를 표시 할 수 있지만 모든 데이터 업데이트 후에 repaint 명령을 삽입해야했습니다. 위의 DoEvents를 사용하면이 문제가 발생하지 않았으며 이러한 모든 다시 그리기 선을 추가 할 필요가 없었습니다.당신이 준 코드가 작동하는지 확인하기 위해 DoEvents와 함께 작동하도록 변경 될 수 있는지 알고 있습니까? – Jon

0

DoEvents을 간단한 Call으로 모듈로 대체 할 수 있습니까? 그래서 다음과 같이 보일 것입니다 ...

ufUpdate.ListBox1.AddItem "Updating Data1…" 
Call UpdateData1() 
ufUpdate.ListBox1.List(0) = "Updating Data1… Done" 
관련 문제