VBA는 모듈 1을 실행하고, 끝날 때까지 기다린 다음 모듈 2를 실행하고, 끝날 때까지 기다린 다음 모듈 3을 실행하고, 끝날 때까지 기다린 다음 모듈 4를 실행합니다.?

VBA는 모듈 1을 실행하고, 끝날 때까지 기다린 다음 모듈 2를 실행하고, 끝날 때까지 기다린 다음 모듈 3을 실행하고, 끝날 때까지 기다린 다음 모듈 4를 실행합니다.?

엑셀 2019 윈도우

4페이지짜리 통합 문서가 있고 각 페이지에는 이전 워크시트의 데이터에 대해 다양한 작업을 수행하는 VBA 모듈이 있으므로 하나씩 실행해야 하지만 이전 작업이 완료되고 현재는 수동으로 실행되는 경우에만 실행됩니다.

논쟁의 여지가 있기 때문에 클릭/호출할 때 동일한 작업을 수행하는 "RunAll"이라는 단일 모듈/매크로를 갖고 싶습니다.

모듈1. 구분된 txt 파일의 데이터를 시트 1로 가져오고 정리합니다. 데이터는 2000~110,000줄 사이로 구성됩니다.

모듈2. 시트 1을 보고 특정 데이터를 선택하여 시트 2로 형식을 지정합니다.

모듈3. 시트 2를 보고 특정 데이터를 선택하여 시트 3으로 형식을 지정합니다.

모듈4. 시트 3을 보고 특정 데이터를 선택하여 시트 4로 형식을 지정합니다.

각 모듈은 어떤 시트를 볼지, 어디에 데이터를 삽입할지 알 수 있도록 코딩되어 있습니다.

이것은 매우 단순화된 버전이므로 읽을 긴 게시물이 표시되지 않지만 수동으로 하나씩 실행하면 모두 완벽하게 작동합니다.

하지만 단순히 다음과 같은 maco를 시도해 보면 다음과 같습니다.

Call module1
Call module2
Call module3
Call module4

일부 시트의 데이터가 뒤죽박죽되어 일부 모듈이 다른 모듈(모듈 1 및 모듈 2)보다 실행하는 데 시간이 더 오래 걸리기 때문에 이전 모듈이 완료되기 전에 모든 데이터를 올바르게 가져오고 형식을 지정하기 전에 다른 모듈이 실행되고 있는 것 같습니다. 그들의 임무.

그래서 내가 하려는 것은...

Call Module1 (and only when it has finished then)

Call Module2 (and only when it has finished then)

Call Module3  (and only when it has finished then)

Call Module4

여기에 게시하기 전에 가능한 답변을 찾기 위해 온라인에서 방대한 검색을 수행했지만 내 요구 사항과 일치하는 항목이 없는 것 같고 내가 찾은 내용 중 상당 부분이 내 머리 위로 바로 전달됩니다.

답변1

VBA는 단일 스레드입니다. 따라서 서로 다른 호출이 동시에 실행되지 않습니다.

@Mathieu가 머리에 못을 박았습니다. sheet1을 선택한 상태에서 "모듈 1" 매크로를 수동으로 호출하는 경우, sheet2 또는 3을 선택한 상태에서 수동으로 실행하면 어떻게 될까요? 기본적으로 sheet#에 대한 참조를 하드코딩해야 합니다.

관련 정보