Application.Run - Daten ByRef übergeben
30.11.2006 11:40:27
Marius
ich möchte mehrere Excel Instanzen parallel laufen lassen,
um auf Dual-Core Rechnern mehr Performance zu erreichen.
Das klappt auch wunderbar mit folgendem Code:
in Server.xls:
Public Datas As Scripting.Dictionary
Sub InitClient()
Dim cApp As Excel.Application
Set cApp = New Excel.Application
cApp.Workbooks.Open ThisWorkbook.Path & "\Client.xls", , True
cApp.Run "MySub", Datas
End Sub
Sub StartJob()
Datas.Item("Job") = "Count"
End Sub
in Client.xls :
Public Datas As Scripting.Dictionary
Sub MySub(ByRef eDatas As Scripting.Dictionary)
Set Datas = eDatas
UserForm1.Show 0
End Sub
in Userform1:
Private Sub UserForm_Activate()
MyInit
End Sub
Public Sub MyInit()
Dim w As Long
restart:
Do
w = w + 1
Sleep 10
Label1.Caption = "Waiting " & w \ 100
DoEvents
Loop Until Datas.Item("Job") 0
Count
Datas.Item("Job") = 0
w = 0
GoTo restart
End Sub
Public Sub Count()
Dim c As Long
For c = 1 To 10000
Label1.Caption = c
DoEvents
Next c
End Sub
Also, im Task Server.xls InitClient ausführen, StartJob
ausführen und Client.xls wird die Sub Count ausgeführt-
so weit, so gut.
Interessanterweise kann ich per cApp.Run auf dem Client
einen Objektverweis auf das Scripting.Dictionary erstellen.
Aber ich muss sozusagen auf einen "gemeinsamen" Datenpool
zugreifen, für den das Scripting.Dictionary etwas ungeeignet
ist.
Gibt es eine Möglichkeit, auf Server und Client auf eine
gemeinsame Klasseninstanz zurückzugreifen? Per Application.Run
ist mir das bisher mit eigenen Klassen nicht gelungen. Oder
hat jemand eine Idee, wie ich einen Array ByRef übergeben kann?
Sprich: was gibt es für möglichkeiten, das die beiden Tasks
auf einen gemeinsamen Speicher zugreifen können?
Bin für jede Idee dankbar