Performance VB-Excel-Zugriff optimieren

08/05/2008 - 16:51 von Holger Osterbuhr | Report spam
Hallo NG,

ich vergleiche (per VB6-Programm) zwei Excel-Tabellen arbeitsblatt- und
zellenweise über das nachfolgende Konstrukt.
Da dauert aber ewig und 3 Tage (wahrscheinlich weil jede Zelle einzeln
angesprochen wird).
Da ich das Excel-Objektmodell nicht so gut kenne, frage ich hiermit nach
geeigneteren Konstrukten.

Set exAppMaster = New Excel.Application
exAppMaster.ScreenUpdating = False
exAppMaster.Interactive = False
exAppMaster.DisplayAlerts = False

Set exAppSlave = New Excel.Application
exAppSlave.ScreenUpdating = False
exAppSlave.Interactive = False
exAppSlave.DisplayAlerts = False

exAppSlave.Workbooks.Open sFileMaster
exAppMaster.Workbooks.Open sFileSlave

For Each wsMaster In exAppMaster.Workbooks(1).Worksheets

lRowMax = ActiveSheet.UsedRange.Rows.Count
lColMax = ActiveSheet.UsedRange.Columns.Count
ActiveSheet.UsedRange.Select
ActiveSheet.UsedRange.Copy


For iRow = 1 To lRowMax
For iCol = 1 To lColMax
If Not (IsNull(Cells(iRow, iCol)) Or
IsNull(exAppSlave.Workbooks(1).Worksheets(iWS).Cells(iRow, iCol))) Then
... dokumentiere den Unterschied ...
End If
Next iCol
Next iRow

Next wsMaster

exAppMaster.Workbooks(1).Close SaveChanges:=False
exAppSlave.Workbooks(1).Close SaveChanges:=False


Gruss
Holger
 

Lesen sie die antworten

#1 Thomas Ramel
08/05/2008 - 19:13 | Warnen spam
Grüezi Holger

Holger Osterbuhr schrieb am 08.05.2008

Da dauert aber ewig und 3 Tage (wahrscheinlich weil jede Zelle einzeln
angesprochen wird).



Das ist IMO nur eine der Ursachen, doch um diesen Einzelvergleich wirst Du
vermutlich nicht herum kommen.

Wie gross sind denn die Bereiche in den Mappen die gegeneinander verglichen
werden?

Da ich das Excel-Objektmodell nicht so gut kenne, frage ich hiermit nach
geeigneteren Konstrukten.



Prinzipiell und zu Beginn:

Hast Du die verwendeten Variablen im Vorfeld alle deklariert?

Wenn ja wie hast Du das getan und welche Typen hast Du dazu verwendet?

Set exAppMaster = New Excel.Application
exAppMaster.ScreenUpdating = False
exAppMaster.Interactive = False
exAppMaster.DisplayAlerts = False

Set exAppSlave = New Excel.Application
exAppSlave.ScreenUpdating = False
exAppSlave.Interactive = False
exAppSlave.DisplayAlerts = False



Hier startest Du *zwei* Instanzen von Excel...

exAppSlave.Workbooks.Open sFileMaster
exAppMaster.Workbooks.Open sFileSlave



...und làdst in jeder Instanz eine einzelne Mappe.

Hast Du das mit Bedacht so getan?

IMO besser und ressourcen-schonenden wàre es, wenn Du beide Mappen in
*einer gemeinsamen* Instanz von Excel öffnen würdest.

For Each wsMaster In exAppMaster.Workbooks(1).Worksheets
lRowMax = ActiveSheet.UsedRange.Rows.Count
lColMax = ActiveSheet.UsedRange.Columns.Count
ActiveSheet.UsedRange.Select
ActiveSheet.UsedRange.Copy



Da hier IMO nur immer das *aktive* Worksheet angesprochen wird (es wird ja
kein weiteres aktiviert), frage ich mich, ob der Vergleich neben der langen
Laufzeit denn eigentlich korrekt funktioniert.
Konntest Du dies prüfen und verifizieren?

For iRow = 1 To lRowMax
For iCol = 1 To lColMax
If Not (IsNull(Cells(iRow, iCol)) Or
IsNull(exAppSlave.Workbooks(1).Worksheets(iWS).Cells(iRow, iCol))) Then



Hier prüfst Du ob eine der beiden Zellen leer ist - richtig?
Wird denn jedes Blatt der Master-Mappe immer mit demselben Blatt der
Slave-Mappe vergleichen - oder was ist der Inhalt der Variablen iWS?

... dokumentiere den Unterschied ...
End If
Next iCol
Next iRow

Next wsMaster

exAppMaster.Workbooks(1).Close SaveChanges:=False
exAppSlave.Workbooks(1).Close SaveChanges:=False



Schliesst Du danach auch die beiden Instanzen von Excel und zerstörst die
Objekt-Variablen?
Ansonsten müsstest Du Leichen im Taskmanager finden, die sich ebenfalls
negativ auf die Performance auswirken dürften.


Mir scheint, dass der Code (noch) nicht fertig ausgereift ist und auch da
noch Handlungsbedarf besteht.
Wie ist denn der Stand der Dinge in dieser Beziehung?



Mit freundlichen Grüssen
Thomas Ramel

- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]
Microsoft Excel - Die ExpertenTipps

Ähnliche fragen