I wouldn't bother physically opening Excel and while I was at it, I would just get all of the data in the sheet:
Option Explicit
Private arrData As Variant
Sub AutoOpen()
Dim lngIndex As Long
Dim strSQL As String
'Get data from column headed "Animal" in Sheet1
strSQL = "SELECT [Animal] FROM [Sheet1$];"
strSQL = "SELECT * FROM [Sheet1$];"
xlFillList arrData, "D:\Data Stores\Load Array from Excel.xls", "True", strSQL
For lngIndex = 0 To UBound(arrData, 2)
'Note 2 corresponds with column C of the Excel data.
ActiveDocument.FormFields(1).DropDown.ListEntries.Add arrData(2, lngIndex)
Next lngIndex
End Sub
Public Function xlFillList(arrPassed As Variant, strWorkbook As String, _
bSuppressHeader As Boolean, strSQL As String)
Dim oConn As Object
Dim oRS As Object
Dim lngNumRecs As Long
Dim strConnection As String
'Create connection:
Set oConn = CreateObject("ADODB.Connection")
If bSuppressHeader Then
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & strWorkbook & ";" & _
"Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
Else
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & strWorkbook & ";" & _
"Extended Properties=""Excel 12.0 Xml;HDR=NO"";"
End If
oConn.Open ConnectionString:=strConnection
Set oRS = CreateObject("ADODB.Recordset")
'Read the data from the worksheet.
oRS.Open strSQL, oConn, 3, 1 '3: adOpenStatic, 1: adLockReadOnly
With oRS
'Find the last record.
.MoveLast
'Get count.
lngNumRecs = .RecordCount
'Return to the start.
.MoveFirst
End With
arrPassed = oRS.GetRows(lngNumRecs)
'Cleanup
If oRS.State = 1 Then oRS.Close
Set oRS = Nothing
If oConn.State = 1 Then oConn.Close
Set oConn = Nothing
lbl_Exit:
Exit Function
End Function