VBOffice

Größe eines Schleifendurchlaufs begrenzen

Es gibt Limits, wieviele Elemente Sie in einem Schleifendurchlauf abrufen können. Dieses Beispiel zeigt, wie Sie damit umgehen können.

Zuletzt geändert: 02.12.2006 | Aufrufe: 39.346  | #36
◀ Vorheriges Beispiel Nächstes Beispiel ▶
Reporter Reporter
Mit dem Reporter erstellen Sie Berichte für Ihre Outlook Daten. Mit wenigen Klicks werden Werte aus Aufgaben, Terminen und dem Journal summiert.

Manchmal stößt man mit dem Outlookobjektmodell an eine Grenze, um den Begriff des Speicherlecks zu vermeiden: Sollen in einer Schleife mehr als 250 Elemente angesprochen werden, kann es passieren, dass der Speicher nicht wieder freigegeben wird. Das sollte aber eigentlich passieren, wenn die Objektvariable auf Nothing oder ein neues Objekt gesetzt wird.

Die Lösung: Sorgen Sie dafür, dass die Objektvariable ihren Gültigkeitsbereich verliert, indem der Bereich in eine separate Funktion ausgelagert wird.


tip  So fügen Sie Makros in Outlook ein
Public Sub LoopFolder(Folder As Outlook.MAPIFolder)
  Dim Cnt As Long
  Dim Limit As Long
  Dim CountFrom As Long
  Dim CountTo As Long
  Dim Done As Long
  Dim Items As Outlook.Items

  Set Items = Folder.Items
  Cnt = Items.Count

  ' Grenze pro Durchlauf festlegen.
  Limit = 250

  If Cnt <= Limit Then
    LoopItems Items, 1, Cnt
  Else
    Do While Done < Cnt
      CountFrom = Done + 1
      CountTo = Done + Limit
      LoopItems Items, CountFrom, CountTo
      Done = CountTo
      If Done = Cnt Then
        Exit Do
      ElseIf Cnt - Done <= Limit Then
        Limit = Cnt - Done
      End If
    Loop
  End If
End Sub

Private Sub LoopItems(Items As Outlook.Items, _
  ByVal CountFrom As Long, _
  ByVal CountTo As Long _
)
  Dim i As Long
  Dim obj As Object
  Dim Mail As Outlook.MailItem

  For i = CountFrom To CountTo
    Set obj = Items.Item(i)
    If TypeOf obj Is Outlook.MailItem Then
      Set Mail = obj
      ' Irgendwas mit dem Objekt machen
    End If
  Next
End Sub
ReplyAll ReplyAll
Mit diesem Addin für Outlook erhalten Sie in verschiedenen Situationen eine Warnung, bevor Sie auf eine Email versehentlich allen anderen Empfängern antworten.
email  Senden Sie eine Nachricht