As Tony is suggesting, there are other ways of doing this. Instead of using Word's find method, you could use regular expressions (you may not even need the array if you want to just use the Match Collection). Heres an example, the bulk of the runtime is just creating a document with "The quick brown fox jumped over the lazy dogs. " 10,000 times:[vba]Sub qazplFindArray()
Dim i As Long, vStr As String, MatchArr() As Range
Dim RegEx As Object, RegC As Object, RegM As Match
Dim vTimer As Double

Documents.Add
For i = 1 To 10000
Selection.TypeText "The quick brown fox jumped over the lazy dogs. "
Next

'put document text into vStr variable
Selection.WholeStory
vStr = Selection.Text

'initialize RegExp object
Set RegEx = CreateObject("vbscript.regexp")
With RegEx
.Global = True
.MultiLine = True
.IgnoreCase = True
.Pattern = "The"
End With
'begin timer
vTimer = Timer
If RegEx.Test(vStr) Then
Set RegC = RegEx.Execute(vStr) 'RegC now holds a collection of every match
ReDim MatchArr(RegC.Count - 1)
i = 0
For Each RegM In RegC
Set MatchArr(i) = ActiveDocument.Range(RegM.FirstIndex, _
RegM.FirstIndex + RegM.Length)

Next
End If

'end timer
MsgBox "The range array was created in " & Timer - vTimer & " seconds"
End Sub[/vba]Matt