|
Tipp 0444
|
Makroausführung beschleunigen (Objekte)
|
|
|
Autor/Einsender: Datum: |
|
Angie 17.03.2005 |
|
Entwicklungsumgebung: |
|
Excel |
|
|
Wird im Code mehr als ein Mal auf ein Objekt (z. B. Workbook, Worksheet,
Range) zugegriffen, sollten Objektvariablen definiert und ein Objektverweis gesetzt
werden (Beispiel 2). Alternativ ist zwar auch eine With-Anweisung (Beispiel 3)
möglich, die Verwendung von Objektverweisen ist jedoch zu empfehlen. Die Beispiele 2 und 3
sind in der Ausführungsgeschwindigkeit identisch, jedoch um ca. 30 % schneller als
Beispiel 1.
|
|
|
|
Sub AddDataToCells_1()
Dim nRow As Integer
For nRow = 1 To 10000
ActiveWorkbook.Worksheets(1).Range("A1"). _
Offset(nRow - 1, 0).Value = nRow
Next nRow
End Sub
|
|
|
|
|
Sub AddDataToCells_2()
Dim objRange As Range
Dim nRow As Integer
Set objRange = ActiveWorkbook.Worksheets(1).Range("A1")
For nRow = 1 To 10000
objRange.Offset(nRow - 1, 0).Value = nRow
Next nRow
Set objRange = Nothing
End Sub
|
|
|
|
|
Sub AddDataToCells_3()
Dim nRow As Integer
With ActiveWorkbook.Worksheets(1).Range("A1")
For nRow = 1 To 10000
.Offset(nRow - 1, 0).Value = nRow
Next nRow
End With
End Sub
|
|
|
|
Wenn mehrere Aktionen durchgeführt werden sollen, sich die Programmierung also nicht nur auf
das Zuweisen von Daten beschränkt, sollte zusätzlich noch eine Objektvariable für das Tabellenblatt
definiert werden. Hier wird Beispiel 2 entsprechend ergänzt und angepasst.
|
|
|
Sub AddDataToCells_4()
Dim objWks As Worksheet
Dim objRange As Range
Dim nRow As Integer
Set objWks = ActiveWorkbook.Worksheets(1)
Set objRange = objWks.Range("A1")
For nRow = 2 To 10000
objRange.Offset(nRow - 1, 0).Value = nRow
Next nRow
Set objRange = Nothing
With objWks.Cells(1, 1)
.Value = "VB-fun-Demo"
.Font.Bold = True
End With
objWks.Columns(1).AutoFit
Set objWks = Nothing
End Sub
|
|
|
Windows-Version |
95 |
|
|
98 |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
Excel-Version |
95 |
|
|
97 |
|
|
2000 |
|
|
2002
(XP) |
|
|
2003 |
|
|
2007 |
|
|
2010 |
|
|
|
|