PDA

Vollständige Version anzeigen : Laufzeit


MichaelMichael
27.08.2009, 11:11
Hallo,

folgender (verkürzter) Code läuft sehr lange. Hat jemand eine Idee zur Optimierung?


Option Explicit

Sub Laufzeit()

Dim FSO As Object
Dim objWord As Object
Dim objdoc As Object
Dim objArb As Object
Dim lngz As Long
Dim Para As Paragraph
Dim ParaBereich As Object
Dim blnCheckOG As Boolean
Dim blnCheckSG As Boolean
Dim blnCheckOR As Boolean
Dim blnCheckSR As Boolean

blnCheckOG = Options.CheckGrammarAsYouType
blnCheckSG = ActiveDocument.ShowGrammaticalErrors
blnCheckOR = Options.CheckSpellingAsYouType
blnCheckSR = ActiveDocument.ShowSpellingErrors

Options.CheckGrammarAsYouType = False
ActiveDocument.ShowGrammaticalErrors = False
Options.CheckSpellingAsYouType = False
ActiveDocument.ShowSpellingErrors = False

Set FSO = CreateObject("Scripting.FileSystemobject")
Set objWord = GetObject(, "Word.Application")
objWord.Application.Visible = True
Set objdoc = objWord.Documents.Open("c:\Otto.doc")
objdoc.Activate
Set objArb = ActiveDocument.Range(Selection.Start, objdoc.Characters.Count)

For lngz = 1 To objArb.Paragraphs.Count
Set Para = objArb.Paragraphs(lngz)
Set ParaBereich = Para.Range
If ParaBereich.Font.Bold = True Then
'...
End If
'...
'...
Next

objdoc.Close

Options.CheckGrammarAsYouType = blnCheckOG
ActiveDocument.ShowGrammaticalErrors = blnCheckSG
Options.CheckSpellingAsYouType = blnCheckOR
ActiveDocument.ShowSpellingErrors = blnCheckSR

Set FSO = Nothing
Set objWord = Nothing
Set objdoc = Nothing
Set objArb = Nothing
Set Para = Nothing
Set ParaBereich = Nothing

End Sub


Gruß Michael

C-J
27.08.2009, 12:08
Hallo, Du könntest hiermit noch Geschwindighkeit rausholen :)

Application.ScreenUpdating = False

Ich hoffe es ist die korrekte Syntax.

Was ich dir eigentlich sagen will, ist dass Du den Screen erst nach der For-Next Schleife wieder updaten solltest und es vor der Schleife abschaltest ..


Gruß,
CJ

PapaSchlumpf
27.08.2009, 12:47
Hi

zuerst: deklarier alle Variablen korrekt und nicht als "Object".

Dann:
Set objdoc = objWord.Documents.Open("c:\Otto.doc")
objdoc.Activate
Set objArb = ActiveDocument.Range(Selection.Start, objdoc.Characters.Count)

verwende objDoc anstelle von Activedocument, da es eh das selbe ist.

Verwende
Set objArb = objDoc.Content
wenn du nicht per Hand was markierst.

TEste ob anstelle der For i=1 to .Count
nicht
For Each-Anweisung schneller ist.

Setze die Objektverweise in umgekehrt gesetzter Reihenfolge wieder auf Nothing,also FSO zuletzt.

Sollte schon was bringen

HTH
PS