Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Excel Makro ist sehr langsam

107 views
Skip to first unread message

cedric

unread,
Mar 21, 2002, 9:19:49 AM3/21/02
to
Hallo,

ich habe in Excel ein Makro geschrieben, das 154 Zellen des aktuellen
Excel-Files durchläuft. Es holt sich aus jeder Zelle den Textinhalt
zeichenweise heraus und liest von diesen Zeichen Farbe und Underlined-
Style aus.
Der Text innerhalb einer Zelle ist im Durchschnitt 350 Zeichen
lang (d.h 154 mal ca. 350 Zeichen).

Mein Problem ist, dass das Ganze auf meinem PIII-933 ca. 10 Minuten
dauert!!!
Hat jemand eine Idee, wie man das Makro beschleunigen könnte?

Vielen Dank im voraus.

Dies ist das gesamte Makro:
-------------------------------------------------------------------
Public Sub Convert()
Dim range, characters, text, nrCharacters, charNr
Dim font, pageNr, color, underlinedStyle

For pageNr = 1 To 154
Set range = Me.Cells(pageNr, 1)
text = range.text

Set range = Me.Cells(pageNr, 4)
text = range.text
nrCharacters = Len(text)
For charNr = 1 To nrCharacters
Set characters = range.characters(charNr, 1)
text = characters.text
Set font = characters.font
color = font.color
underlinedStyle = font.Underline
Next charNr
Next pageNr

End Sub
-------------------------------------------------------------------

Roland Bürkel

Alexander Krauß

unread,
Mar 21, 2002, 9:34:43 AM3/21/02
to


also mal abgesehen von dem sinn dieses makros (du überschreibst ja immer die
gelesenen werte):
1. bei 154 zellen mit ca 350 zeichen macht das schon 50000 zeichen dazu jeweils
auslesen, werte abfragen, macht ne menge operationen. die brauchen nun mal ein
bischen.
2. lass das ganze set weg!
bsp:
text=me.cells(pagenr,1).text
das gleiche auch bei character und font! excel ist in der lage, darauf
zuzugreifen (bsp: cells(,).characters(,).font.color)


es sollte damit etwas schneller werden, aber es bleibt 1.


mfG alexander
--
__________________________________________________________
News suchen, lesen, schreiben mit http://newsgroups.web.de

cedric

unread,
Mar 22, 2002, 2:37:23 AM3/22/02
to
Hallo Alexander,

danke für Deine Antwort.
Das Makro aus meinem ersten positing ist nur der Kern. In Wirklichkeit
passiert noch sehr viel mehr. Im Gegensatz dazu ist das Auslesen
dieser 50000 Zeichen mit Farbe und Underlined-Style nur ein kleiner
Teil.
Ich habe aber herausgefunden, dass der Rest in "normaler"
Geschwindigkeit abläuft, d.h. innerhalb weniger Sekunden. So wie man
es von einem aktuellen Rechner auch erwarten würde.
Nur der Teil, in dem ich die Zeichen aus den Excel-Zellen auslese,
macht das ganze Makro sooo langsam. D.h. die Excel-Funktionen sind
unheimlich langsam (schlecht programmiert, wahnisinniger
Overhead...?).
Deswegen wollte ich wissen, ob jemand das Problem mit dem langsamen
Zugriff auf einzelne Zeichen einer Zelle kennt.

Vielen Dank nochmal.

Dr. Eckehard Pfeifer

unread,
Mar 22, 2002, 4:44:29 AM3/22/02
to
Hallo, ich habs auch mal getestet. Man gewinnt nichts durch ordentliche
Variablen-Deklaration und etwa 40% durch Weglassen der jeweiligen
Set-Anweisung (Test mit 2 Zeilen zu 400 Zeichen dauerte 16 bzw. 10 sec). Das
allerdings nur in der verkuerzten Form, wo ein "gesettetes" Objekt nur
einmal angesprochen wird. Was passiert eigentlich, wenn Du den gesamten
Inhalt in eine Word-Datei exportierst und dort die gleichen "Recherchen"
anstellst (notfalls natuerlich aus Excel heraus)? Denn: Excel zielt ja nicht
gerade aufs Untersuchen von Zeichenketten, Word sicher eher.

--
Mit freundlichen Grüßen
Eckehard Pfeifer

www.dr-e-pfeifer.de
Ein Blick lohnt sich immer: www.vba-magazin.de

Wolf.W.Radzinski

unread,
Mar 22, 2002, 6:09:09 AM3/22/02
to

"cedric" <roland....@gmx.de> schrieb im Newsbeitrag
news:61c79a91.02032...@posting.google.com...

> Hat jemand eine Idee, wie man das Makro beschleunigen könnte?

was nacht das makro überhaupt?

> Dies ist das gesamte Makro:
> -------------------------------------------------------------------
> Public Sub Convert()
> Dim range, characters, text, nrCharacters, charNr
> Dim font, pageNr, color, underlinedStyle
>
> For pageNr = 1 To 154
> Set range = Me.Cells(pageNr, 1)
> text = range.text
>

Zuweisung zu text sinnlos, da das Ganze 2 Zeilen weiter unten einfach
überschrieben wird??

> Set range = Me.Cells(pageNr, 4)
> text = range.text
> nrCharacters = Len(text)
> For charNr = 1 To nrCharacters
> Set characters = range.characters(charNr, 1)
> text = characters.text
> Set font = characters.font
> color = font.color
> underlinedStyle = font.Underline
> Next charNr

For Schleife sinnlos? Nach ende der Schleife hat das Ganze das Format des
letzten Charakters??

> Next pageNr
>
> End Sub

Irgendwie verstehe ich obiges Makro überhaupt nicht :-(


cedric

unread,
Mar 25, 2002, 6:26:43 AM3/25/02
to
Hallo,

danke nochmals für euere Antworten.

Da das Makro etwas verwirrend ist, eine kurze Erklärung:

Bei diesem Makro handelt es sich nur um einen kleinen Test.
In Wirklichkeit mache ich das Ganze in Visual C++ über COM.
Als ich dort herausgefunden hatte, welche Aufrufe den Programm-
ablauf so langsam machen (Farbe und Underlined-Style auslesen),
habe ich den Kern in Excel selbst als Makro geschrieben.
Somit habe ich zumindest sichergestellt, dass nicht der COM-
Overhead die Aufrufe so langsam macht (da das Makro oben auch
10 min braucht).
Deswegen ergibt das Makro eigentlich auch keinen Sinn. Der
Visual C++ Teil ist sehr viel umfangreicher. Die Geschwindigkeit
ergibt sich aber aus diesen "paar" Funktionsaufrufen, die die
Zeichen einer Zelle nacheinander auslesen und von ihnen Farbe
und Underlined-Style auslesen.

Wenn ich mir anschaue, was das C++-Programm alles in Bruchteilen
einer Sekunde macht, habe ich gedacht, dass vielleicht diese beiden
Excel-Funktionen (Farbe, underlined-style auslesen) schlecht/fehlerhaft
von Microsoft implementiert sind und dies vielleicht irgendjemanden
bekannt ist.

Vielen Dank für euere Mühe.
Roland Bürkel
implementiert sind.

0 new messages