Поделиться через


Циклическая обработка коллекции

Существует несколько разных способов циклов по элементам коллекции. Однако рекомендуемый метод для циклов в коллекции — использовать for Each... Следующий цикл. В этой структуре Visual Basic повторяет блок инструкций для каждого объекта в коллекции. В следующем примере показано имя каждого документа в коллекции Documents .

Sub LoopThroughOpenDocuments() 
 Dim docOpen As Document 
 
 For Each docOpen In Documents 
 MsgBox docOpen.Name 
 Next docOpen 
End Sub

Вместо отображения имени каждого элемента в окне сообщения можно использовать массив для хранения сведений. В этом примере используется массив для хранения имени каждой закладки, содержащейся в активном документе.

Sub LoopThroughBookmarks() 
 Dim bkMark As Bookmark 
 Dim strMarks() As String 
 Dim intCount As Integer 
 
 If ActiveDocument.Bookmarks.Count > 0 Then 
 ReDim strMarks(ActiveDocument.Bookmarks.Count - 1) 
 intCount = 0 
 For Each bkMark In ActiveDocument.Bookmarks 
 strMarks(intCount) = bkMark.Name 
 intCount = intCount + 1 
 Next bkMark 
 End If 
End Sub

Вы можете выполнить цикл по коллекции, чтобы условно выполнить задачу на членах коллекции. Например, следующий код обновляет поля DATE в активном документе.

Sub UpdateDateFields() 
 Dim fldDate As Field 
 
 For Each fldDate In ActiveDocument.Fields 
 If InStr(1, fldDate.Code, "Date", 1) Then fldDate.Update 
 Next fldDate 
End Sub

Вы можете выполнить цикл по коллекции, чтобы определить, существует ли элемент. Например, в следующем коде отображается сообщение, если запись автотекста с именем Filename является частью коллекции AutoTextEntries .

Sub FindAutoTextEntry() 
 Dim atxtEntry As AutoTextEntry 
 
 For Each atxtEntry In ActiveDocument.AttachedTemplate.AutoTextEntries 
 If atxtEntry.Name = "Filename" Then _ 
 MsgBox "The Filename AutoText entry exists." 
 Next atxtEntry 
End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.