2017-12-05 8 views
1

나는 각 요일에 대해 많은 수의 사람들에 대한 성능 점수를 계산하는 데 사용되는 Access 데이터베이스를 보유하고 있습니다.VBA를 사용하여 DB를 병렬로 엽니 다.

데이터 집합의 크기 때문에 절차가 매우 느리게 실행됩니다. 이 작업을 가속화 할 수있는 잠재적 인 방법은 하루 5 점을 계산하는 프로세스를 고려 중입니다.

나는이 DB들을 모두 열어 놓은 VBA 코드를 작성했다. (일단 각 DB가 열리면 자체 프로 시저를 시작하는 자체 autoExec 매크로가있다.)

Sub DBloop() 
Dim dbArr As Variant 
Dim i As Integer 

dbArr = Array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday") 

For i = 0 To UBound(dbArr) 
    openDBs CStr(dbArr(i)) 
Next 
End Sub 

Sub openDBs(dbname As String) 
Dim acc As Access.Application 
Dim DBpath As String 
Dim strDbName As String 

DBpath = "H:\Performance Test\" 
strDbName = DBpath & dbname & ".accdb" 

Set acc = New Access.Application 
acc.Visible = True 
acc.OpenCurrentDatabase strDbName, False 
End Sub 

불행하게도, 어떤 일이 일어나고 각 DB를 열로 그 DB의 자동 실행 매크로는 다음 중 하나를 열기 전에 완료 될 때까지, 초기 절차가 기다리고 있다는 것입니다. 이 문제에 대한 해결 방법이 있는지 아는 사람 있습니까?

+0

실제로 데이터를 분할하려고합니까? 아마도 도움보다 더 많은 문제가 발생할 것입니다. – Andre

+0

나는 너무 예배를 계획하고 있었다. 현재 각 사람마다 매일 별도의 점수가 있습니다. 이 점수는 서로 독립적으로 효과가 있기 때문에 별도의 절차로 나누어서 문제를 생각하지 않았습니다. 간과 할 수있는 잠재적 인 문제가 있습니까? – Leroy

+1

모든 데이터를 결합하는 모든 종류의 쿼리는 더욱 어려워 질 것입니다. - 계산에 대한 성능 도움을 요청할 가치가 있습니다. 아마도 크게 향상 될 수 있습니다. – Andre

답변

2

데이터베이스를 동기식으로 열지 않는 방법은 여러 가지가 있습니다. 가장 간단한 것들의

하나는 다음과 같다 :

Application.FollowHyperlink strDbName 

(새 Access 응용 프로그램 개체를 만들 필요가 없습니다).

또 다른 방법은 자동 실행 매크로의 코드를 비동기 적으로 실행하는 것입니다.

  1. 코드를 실행
  2. 설정 그것의 타이머 1
  3. 에 숨겨진 폼을 만들고, 타이머

또한 방법에 폼을 닫습니다 : 그에 사용하는 기술은 다음과 같다 Shell 또는 WScript.Shell 개체를 사용하여 항목을 포함하십시오.

+0

감사합니다. Erik, 훌륭합니다. 나는 그것이 가장 단순한 것처럼 FollowHyperlink와 함께 갈 것이라고 생각한다. :) – Leroy

1

http://www.cpearson.com/excel/ShellAndWait.aspx에서 VBA Shell 함수는 외부 프로그램을 시작하거나 당신이 일반적으로 Windows 시작 메뉴에서 실행 항목을 사용하는 모든 작업을 수행 할 수 있습니다.
Shell 함수는 명령 텍스트를 시작한 다음 즉시 호출 VBA 코드로 제어를 반환합니다. Shell에서 종료 할 때까지 기다리지 않습니다.

원하는 경우 Shell을 사용하십시오.

' example Access 2010 32bit 
Const ACCESS_PATH = """C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE""" 

Shell ACCESS_PATH & " """ & strDbName & """"